2014-02-16 5 views
-1

Я написал фрагмент кода, который анализирует ссылки из верхней навигации с веб-сайта.Написание XML из проанализированных данных

private string url = "http://www.blah.com/"; 
    private HtmlWeb web; 
    private HtmlDocument doc; 

    private string topNavName = ""; 
    private string topNavUrl = ""; 

    public void Setup() 
    { 
     try 
     { 
      web = new HtmlWeb(); 
      doc = web.Load(url); 
      web.AutoDetectEncoding = true; 
      TopCats(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("There has been an issue loading url {0}", e); 
     } 
    } 

    private List<Catalogue> TopCats() 
    { 
     List<Catalogue> GetTop = new List<Catalogue>(); 
     try 
     { 
      HtmlNodeCollection TopNode = doc.DocumentNode.SelectNodes("//*[@id='TopTabs1_tabs']/li/span/a"); 
      if (TopNode != null) 
      { 
       foreach (HtmlNode Topitem in TopNode) 
       { 
        topNavName = Topitem.InnerText; 
        topNavUrl = url + Topitem.Attributes["href"].Value; 

        Catalogue xmltopcat = new Catalogue(); 
        xmltopcat.indentifier = "here"; 
        xmltopcat.name = topNavName; 
        xmltopcat.url = topNavUrl; 
        xmltopcat.description = ""; 

        Console.WriteLine("Category >> {0}",topNavName); 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("There has been an issue Top Nav {0}", e); 
     } 
     return GetTop; 
    } 
} 

Проблема, которую я имею, что я не знаю, как сделать каждый анализироваться данные в цикле for each заполнить XML-элементы. Для отображения на XML Я создал новый класс:

class Catalogue 
{ 
    [XmlElement("Category identifier")] 
    public string indentifier 
    { get; set; } 

    [XmlElement("name")] 
    public string name 
    { get; set; } 

    [XmlElement("url")] 
    public string url 
    { get; set; } 

    [XmlElement("description")] 
    public string description 
    { get; set; } 
} 

Я действительно не уверен, чтобы создать XML document- Я попробовал несколько вещей, и я действительно не уверен, что я делаю. Я все еще изучаю C#, и это мой первый опыт работы с XML.

+0

возможный дубликат [Преобразование разобранный HTML в XML] (HTTP : //stackoverflow.com/questions/21713375/converting-parsed-html-to-xml) –

ответ

1

Вы можете использовать LINQ to XML. Сначала сохраните все ваши Catalogues в List.

Catalogue xmltopcat = new Catalogue(); 
xmltopcat.indentifier = "here"; 
xmltopcat.name = topNavName; 
xmltopcat.url = topNavUrl; 
xmltopcat.description = ""; 
GetTop.Add(xmltopcat); // <-- add current catalogue to the list 

Затем вызовите TopCats метод и получить список и создать XML-файл:

var list = TopCats(); 

XElement xDoc = new XElement("Catalogues", 
           list.Select(c => new XElement("Catalogue", 
           new XElement("indentifier",c.indentifier) 
           new XElement("name",c.name) 
           new XElement("url",c.url) 
           new XElement("description",c.description))); 
xDoc.Save("savepath"); 

Или вы можете использовать XmlSerializer

FileStream fs = new FileStream("records.xml",FileMode.OpenOrCreate,FileAccess.Write); 
XmlSerializer serializer = new XmlSerializer(typeof(List<Catalogue>),new XmlRootAttribute("Catalogues")); 
serializer.Serialize(fs,list); 
Смежные вопросы