如何在不指定节点名称的情况下循环遍历所有节点

Pho*_*nic 5 html c# html-agility-pack

我正在尝试从任何 html 文档的所有 htmlDocument 节点获取所有 insideText。

我一直在做一些研究,但还没有找到如何能够遍历整个文档中的所有父节点和子节点而无需指定节点名称的解决方案。

我想这样做是因为我将使用不同的 html 文档,因此此时指定节点名称对我来说不是一个选项。

har*_*r07 3

您可以使用以下 XPath 表达式从任意 HTML 文档获取所有非空文本节点,而无需了解文档结构:

//text()[normalize-space()]
Run Code Online (Sandbox Code Playgroud)

完整工作控制台应用程序演示:

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);
}
Run Code Online (Sandbox Code Playgroud)

Dotnetfiddle Demo

输出 :

a1
a2
b1
b2
Run Code Online (Sandbox Code Playgroud)