检索元素的所有文本节点,包括使用 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找到的一个片段,但我不知道另一种方法,我一直在疯狂。

检索元素的所有文本节点,包括使用 C# 中的 HtmlAgilityPack 的子节点

应使用相对 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 元素后代