从html文档中提取html片段

时间:2010-12-08 14:20:16

标签: c# html vb.net text

我正在寻找一种从html文档中提取html“片段”的有效方法。我的first implementation使用了Html Agility Pack。这似乎是一个合理的方法来解决这个问题,直到我开始在大型html文档上运行提取 - 性能非常差,因为这些微不足道的事情(我猜是因为解析整个文档需要花费的时间) )。

有人能建议更有效的方法来实现我的目标吗?

总结:

  1. 为了我的目的,一个html“片段” 被定义为内部的所有内容 html的<body>标记 文档

  2. 理想情况下,我想退回 内容如果没有,则不会改变 包含<html><body> (我假设我通过了一个HTML 片段开头)

  3. 我在内存中提供了整个html文档(作为字符串),我不会按需流式传输它 - 所以潜在的解决方案不需要担心。

  4. 绩效至关重要,因此潜在的解决方案应该考虑到这一点。

  5. 示例输入:

    <html>
       <head>
         <title>blah</title>
       </head>
       <body>
        <p>My content</p>
       </body>
    </html>
    

    期望输出:

    <p>My content</p>
    

    欢迎使用C#或VB.NET中的解决方案。

3 个答案:

答案 0 :(得分:2)

大多数html不符合XHTML标准。我会做一个HTTP get请求,并搜索.Contains("<body>").Contains("</body>")的结果文本。您可以将这两个位置用作读取器流的开始和停止索引。在body标签之外,您实际上不需要担心XML合规性。

答案 1 :(得分:0)

您可以使用WebBrowse控件破解它并利用webBrowser1.document属性(虽然不确定您要完成的任务)。

答案 2 :(得分:0)

如果我没记错的话,我过去用XPathNavigator做过类似的事情。我觉得它看起来像这样:

        XPathDocument xDoc = new System.Xml.XPath.XPathDocument(new StringReader(content));
        XPathNavigator xNav = xDoc.CreateNavigator();
        XPathNavigator node = xNav.SelectSingleNode("/body");

您可以将/body更改为您需要查找的内容。