这些天解析HTML的最佳方法是什么?

时间:2013-12-03 22:37:13

标签: c# html xml parsing xslt

所以我编写了一个解析一些HTML的程序。有趣的是,它的编写方式是它可以使用相同的代码库解析不同的页面(具有相似的数据),而不是重写解析代码。如果你愿意的话,它是一种解析引擎。

我当前版本的工作方式是将HTML转换为XHTML然后我使用XSLT(目前在C#中为1.0)转换将数据转换为我的应用程序可以轻松使用和序列化的规范化数据结构。这允许我简单地为我想要解析数据的每个页面编写一个新的XSLT转换,它只需要在不重写代码或编写任何新的解析代码的情况下工作。

我很好奇,如果这仍然是我目前最好的选择,或者还有其他更好的选择。我目前陷入两难境地,因为XSLT 2.0实际上并不是非常容易找到支持而不需要支付大量现金,而且一般来说XSLT有点麻烦。我很好奇是否有更可行和更简单的东西用于同一目的。

我正在寻找的解决方案必须可以在C ++和/或C#(.net)中使用。越简单越轻越好。

1 个答案:

答案 0 :(得分:3)

只需使用带有htmlAgilityPack的代码,您就可以将html页面作为xmlDoc进行操作。下面是关于如何实现这个的代码示例

        HtmlWeb htmlWeb = new HtmlWeb();          
        MemoryStream ms = new MemoryStream();
        XmlTextWriter xmlTxtWriter = new XmlTextWriter(ms, Encoding.ASCII);            
        htmlWeb.LoadHtmlAsXml(uriofhtmlPageToload, xmlTxtWriter);
        ms.Position = 0;
        XDocument xdoc = XDocument.Load(ms);
        XElement xHtml = xdoc.Root;
        string nameSpace = "{" + xdoc.Root.GetDefaultNamespace().ToString() + "}";
        XElement xBody = xHtml.Element(nameSpace + "body");
        List<XElement> xBodyElts = xBody.Descendants().ToList();
        string elt = string.Empty;
        foreach (var eltPage in xBodyElts)
        {
           //here just to show that you can iterate as xmlDoc 
          }