XPath“不”。忽略具有特定标记的分支

时间:2012-02-28 12:21:59

标签: xpath html-agility-pack

我已将网页加载到HTML Agility Pack中并拥有一个DOM。我想使用XPATH来提取页面上的所有文本(但不是<script>标签中的javascript)。

我想我需要一个// text()然后一个'not'来忽略分支中有<script>的任何标记。

我试过了

doc.DocumentNode.SelectNodes("//text()[not(self::script)]"))

doc.DocumentNode.SelectNodes("//text()[not(script)]"))
但是没有工作。他们返回的节点的XPath属性的一个示例是(注意脚本)

/html[1]/body[1]/div[2]/div[4]/div[1]/div[1]/div[1]/div[3]/script[1]/#text[1]

我已经咨询了这两篇文章。

Is it possible to do 'not' matching in XPath?

Grab all text from html with Html Agility Pack(这是一个很好的帖子,但它带来了JS)

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您的第一次尝试拒绝所有作为脚本元素的文本节点,而您的第二次尝试拒绝所有具有脚本节点子节点的文本节点。当然,在这两种情况下,情况都是不对的。

您没有清楚地解释您的要求,但我想您要拒绝所有将脚本元素作为其父元素的文本节点,这将是

//text()[not(parent::script)]

//*[not(self::script)]/text()