C# 从html文档中提取html片段
我正在寻找一种从html文档中提取html“片段”的有效方法。我的团队使用了Html敏捷包。这似乎是解决这个问题的一种合理方法,直到我开始在大型html文档上运行提取-对于如此琐碎的东西来说,性能非常差(我猜是因为解析整个文档所花费的时间) 有人能提出一个更有效的方法来实现我的目标吗 总结如下:C# 从html文档中提取html片段,c#,html,vb.net,text,C#,Html,Vb.net,Text,我正在寻找一种从html文档中提取html“片段”的有效方法。我的团队使用了Html敏捷包。这似乎是解决这个问题的一种合理方法,直到我开始在大型html文档上运行提取-对于如此琐碎的东西来说,性能非常差(我猜是因为解析整个文档所花费的时间) 有人能提出一个更有效的方法来实现我的目标吗 总结如下: <html> <head> <title>blah</title> </head> <body>
<html>
<head>
<title>blah</title>
</head>
<body>
<p>My content</p>
</body>
</html>
<p>My content</p>
标记
文件
或
(我假设我通过了一个html
(以片段开头)<html>
<head>
<title>blah</title>
</head>
<body>
<p>My content</p>
</body>
</html>
<p>My content</p>
废话
我的内容
所需输出:
<html>
<head>
<title>blah</title>
</head>
<body>
<p>My content</p>
</body>
</html>
<p>My content</p>
我的内容
欢迎使用C#或VB.NET解决方案。您可以使用控件对其进行破解,并利用
webBrowser1.document
属性(尽管不确定您试图实现什么)。如果我没记错的话,我过去使用XPathNavigator
做过类似的事情。我想是这样的:
XPathDocument xDoc = new System.Xml.XPath.XPathDocument(new StringReader(content));
XPathNavigator xNav = xDoc.CreateNavigator();
XPathNavigator node = xNav.SelectSingleNode("/body");
您可以将
/body
更改为您需要查找的任何内容。大多数html都不会兼容XHTML。我将执行一个HTTP get请求,并在结果文本中搜索.Contains(“”
和.Contains(“”
)。您可以使用这两个位置作为读卡器流的开始和停止索引。在body标记之外,您真的不需要担心XML遵从性。Brad,我假设这不会比使用Html Agility Pack快多少;我在这里寻找一个性能解决方案,可能涉及直接操作我收到的文本。这是一个很好的方法,但您必须非常小心,您的HTML符合XHTML,并且不包括令人讨厌的未关闭标记,具体如。这看起来是一个合理的解决方案(我需要测试性能以确保),但正如汤姆所说;我可能无法假设我得到的html是XHTML兼容的;我知道我曾经遇到过这样的情况,我必须添加一个根节点以使我的输入兼容,但我能够使它工作;我们可以假设我在内存中有整个html文档字符串;所以我不会点播。我已经相应地更新了我的问题。到目前为止,这是执行OP要求的最快的方式。而且您不需要读者流。只需一个包含HTML的常规字符串就可以了。这似乎是一个非常合理的方法,今天稍后我将对此进行一次尝试。与我最初的实现相比,这提供了非常好的性能结果;也许没有那么安全——但这不是我们的目标。