将列表从html转换为xml格式

本文关键字:xml 格式 转换 html 列表 | 更新日期: 2023-09-27 18:09:46

我正试图用控制台应用程序将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++;
    }

以及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; }
}

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

将列表从html转换为xml格式

创建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),
            });
        }
    }

谢谢大家。我将"News"类标记为Serializable,并使用几行代码设法生成xml文件。下面是代码,非常简单:

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