2016-09-29 2 views
0

Я пытаюсь преобразовать список html в xml-формат с помощью консольного приложения, но я сделал то, что планировал, и теперь я не знаю, как продолжить. Я поделюсь своим кодом и немного объясню. То, что я сейчас не знаю, и меня смущает, это то, где происходит «волшебство». Хорошо, я знаю, что мне нужно взять этот список со страницы, прочитать список со всеми тегами внутри, но что дальше, как я могу преобразовать этот список в XML-формат? Я новичок в xml, я знаю некоторые основы, поэтому, пожалуйста, помогите мне.Преобразование списка из html в xml-формат

Вот приложение:

static void Main(string[] args) 
{ 
    string _url = "http://example.com/media"; 

    int newsCounter = 0; 
    List<News> _newsList = new List<News>(); 

    HtmlWeb web = new HtmlWeb(); 
    HtmlDocument doc = web.Load(_url); 
    HtmlNode ulNode = doc.DocumentNode.SelectSingleNode("//ul[@class='content articles']"); 

    HtmlNodeCollection liNode = ulNode.SelectNodes(".//li"); 
    foreach (HtmlNode node in ulNode.SelectNodes(".//div[@class='article_box']")) 
    { 
     var news = new News(); 

     news.Imgsrc = node.FirstChild.SelectSingleNode("//img").Attributes["src"].Value; 

     var nodes = doc.DocumentNode.FirstChild.SelectNodes("//img[@src]"); 

     foreach (HtmlNode childNode in node.SelectNodes(".//div[@class='box_info']")) 
     { 
      // string src = node.SelectSingleNode("//img").Attributes["src"].Value; 

      foreach(HtmlNode _node in childNode.SelectNodes(".//h3")) 
      { 
       news.Link = ""; 
       news.Title = _node.FirstChild.InnerText; 
       news.Date = _node.NextSibling.NextSibling.InnerText; 
       news.Text = _node.NextSibling.NextSibling.NextSibling.NextSibling.InnerText; 
      } 
     } 

     _newsList.Add(news); 
     newsCounter++; 

    } 

, а также класс News:

public class News 
{ 
    public string Imgsrc { get; set; } 

    public string Title { get; set; } 

    public string Link { get; set; } 

    public string Date { get; set; } 

    public string Text { get; set; } 
} 

все эти параметры я должен читать в list.I могу читать их и возвращение все новости в моем списке, но что дальше, как преобразовать мой список в xml-формат? Любые предложения приветствуются.

+1

Ну, самый простой, теперь у вас есть этот код, будет отмечать 'News' как' Serializable', а затем использовать 'XmlSerializer' экспортировать его. Возможно, было проще просто построить XML, когда вы идете, используя 'XmlDocument' или LINQ to XML. –

+0

Я согласен с Майком ... нет необходимости в промежуточном списке. Просто создайте свой XML напрямую, когда идете с XDocument. – SledgeHammer

ответ

0

Существует много способов создания xml. В вашем случае не так много элементов, поэтому просто использовать Xml linq очень просто. Ввод его в класс может привести к созданию более чистого кода, или вы можете просто использовать код непосредственно, как предлагалось Sledge.

public class News 
 
    { 
 
     public string Imgsrc { get; set; } 
 

 
     public string Title { get; set; } 
 

 
     public string Link { get; set; } 
 

 
     public string Date { get; set; } 
 

 
     public string Text { get; set; } 
 

 
     public XElement ToXml() 
 
     { 
 
      return new XElement("news", new object[] { 
 
       new XElement("Imgscr", Imgsrc), 
 
       new XElement("Title", Title), 
 
       new XElement("Link", Link), 
 
       new XElement("Date", Date), 
 
       new XElement("Text", Text), 
 
      }); 
 
     } 
 
    }

0

Спасибо всем, ребята. Я обозначил класс «Новости» как Serializable и несколькими строками кода смог создать файл xml. Вот код, на самом деле просто:

XmlSerializer serializer = new XmlSerializer(typeof(List<News>)); 
     using (TextWriter writer = new StreamWriter(@"D:\News.xml")) 
     { 
      serializer.Serialize(writer, _newsList); 
     } 
Смежные вопросы