将列表从html转换为xml格式

时间:2016-09-29 21:08:46

标签: c# html xml console-application

我正在尝试使用控制台应用程序将html列表转换为xml格式,但我做了我计划的事情,现在我不知道如何继续。我将分享我的代码并解释一下。我现在还不知道,让我感到困惑的是魔法'发生。好吧,我知道我必须从页面中获取该列表,阅读包含所有标签的列表,但接下来,如何将该列表转换为xml格式?我是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; }
}

这些是我必须从列表中读取的所有参数。我能够阅读它们并返回列表中的所有新闻,但接下来,如何将列表转换为xml格式?欢迎任何建议。

2 个答案:

答案 0 :(得分: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),
            });
        }
    }

答案 1 :(得分:0)

感谢大家。我标记了&#39;新闻&#39; class as Serializable,并使用几行代码管理生成xml文件。这是代码,非常简单:

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