2016-09-29 14 views
0

私はコンソールアプリケーションでxmlフォーマットにHTMLリストを変換しようとしていますが、私は何を計画したのですか?私は自分のコードを共有し、少し説明します。私が今知りませんが、私を混乱させているのは「魔法」が起こる場所です。私はページからそのリストを取らなければならないことを知っている、内部のすべてのタグでリストを読んで、次に何を、どのように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++; 

    } 

ともニュースクラス:

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」を使ってエクスポートするのが最も簡単なコードです。 'XmlDocument'やLINQ to XMLを使ってXMLを構築する方が簡単かもしれません。 –

+0

私はMikeに同意します...中間リストは必要ありません。 XDocumentを使用すると、XMLを直接ビルドすることができます。 – 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

感謝。私は 'News'クラスをSerializableとマークし、xmlファイルを生成するために数行のコードを管理しました。

XmlSerializer serializer = new XmlSerializer(typeof(List<News>)); 
     using (TextWriter writer = new StreamWriter(@"D:\News.xml")) 
     { 
      serializer.Serialize(writer, _newsList); 
     } 
関連する問題