我想从任何html文档中获取所有htmlDocument节点的所有innerText。如何遍历所有节点而不指定节点名称
我一直在做一些研究,但还没有找到解决方案,我将无需指定节点名称即可浏览整个文档中的所有父节点和子节点。
我想这样做,因为我将使用不同的html文档,因此指定节点名称在此时不适用于我。
我想从任何html文档中获取所有htmlDocument节点的所有innerText。如何遍历所有节点而不指定节点名称
我一直在做一些研究,但还没有找到解决方案,我将无需指定节点名称即可浏览整个文档中的所有父节点和子节点。
我想这样做,因为我将使用不同的html文档,因此指定节点名称在此时不适用于我。
您可以使用下面的XPath表达式得到任意的HTML文档中的所有非空文本节点,而不必知道文档结构:
//text()[normalize-space()]
全部工作的控制台应用程序演示:
var html = @"<p>
<span>a1</span>
<span>a2</span>
<span>b1</span>
<span>b2</span>
</p>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var result = doc.DocumentNode.SelectNodes("//text()[normalize-space()]");
foreach (var r in result)
{
Console.WriteLine(r.InnerText);
}
输出:
a1
a2
b1
b2
我想通了,现在... OMG它是如此简单,首先,因为我不知道该如何使用这些功能
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.Load(MyIO.bingPathToAppDir("Test data/testHTML.html"));
HtmlNode j = htmlDoc.DocumentNode;
foreach (HtmlNode node in j.ChildNodes)
{
checkNode(node);
}
static void checkNode(HtmlNode node)
{
foreach (HtmlNode n in node.ChildNodes)
{
if (n.HasChildNodes)
{
checkNode(n);
}
else
{
Console.WriteLine(n.InnerText);
}
}
}
你也可以找到像这样的所有节点:
string fsURLAddress = "http://www.external-url-sample.com/";
var loHtmlDocument = new HtmlWeb().Load(fsURLAddress);
var loHTMLNodeList = loHtmlDocument.DocumentNode.Descendants().ToList();