检索元素的所有文本节点,包括使用 C# 中的 HtmlAgilityPack 的子节点
本文关键字:中的 HtmlAgilityPack 子节点 包括使 节点 元素 文本 检索 | 更新日期: 2023-09-27 18:35:21
我正在尝试获取元素的所有文本节点,包括其子元素,但由于某种原因,它为我提供了整个文档HTML。
这就是我想出的:
HtmlAgilityPack.HtmlNode el = htmlDoc.DocumentNode.SelectSingleNode("(//div[@class='TableContainer'])[" + index + "]");
if (el != null)
{
foreach (HtmlNode node in el.SelectNodes("//text()"))
{
Debug.WriteLine("text=" + node.InnerText.Replace(" ", " "));
}
}
它将打印整个文档的text=line
。我确定//text()
有问题,这是我在SO找到的一个片段,但我不知道另一种方法,我一直在疯狂。
应使用相对 XPath 表达式,即相对于el
上下文节点
HtmlAgilityPack.HtmlNode el = htmlDoc.DocumentNode.SelectSingleNode("(//div[@class='TableContainer'])[" + index + "]");
if (el != null)
{
foreach (HtmlNode node in el.SelectNodes(".//text()"))
{
Debug.WriteLine("text=" + node.InnerText.Replace(" ", " "));
}
}
"//text()"
将选择文档根节点的所有后代文本节点
有关详细信息,请参阅 XPath 规范中的位置路径和缩写语法。
//para
选择文档根的所有 para 后代,从而选择与上下文节点相同的文档中的所有 para 元素
.//para
选择上下文节点的 para 元素后代