我正在寻找一种从html文档中提取html“片段”的有效方法。我的first implementation使用了Html Agility Pack。这似乎是一个合理的方法来解决这个问题,直到我开始在大型html文档上运行提取 - 性能非常差,因为这些微不足道的事情(我猜是因为解析整个文档需要花费的时间) )。
有人能建议更有效的方法来实现我的目标吗?
总结:
为了我的目的,一个html“片段”
被定义为内部的所有内容
html的<body>
标记
文档
理想情况下,我想退回
内容如果没有,则不会改变
包含<html>
或<body>
(我假设我通过了一个HTML
片段开头)
我在内存中提供了整个html文档(作为字符串),我不会按需流式传输它 - 所以潜在的解决方案不需要担心。
绩效至关重要,因此潜在的解决方案应该考虑到这一点。
示例输入:
<html>
<head>
<title>blah</title>
</head>
<body>
<p>My content</p>
</body>
</html>
期望输出:
<p>My content</p>
欢迎使用C#或VB.NET中的解决方案。
答案 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
更改为您需要查找的内容。