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

html-agility-pack xpath

我已经将一个网页加载到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]

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

是否可以在XPath中进行“不”匹配?

使用Html Agility Pack从html中获取所有文本 (这是一个很好的帖子,但它带出了JS)

有什么建议么?

一般承认的答案

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

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

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

要么

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



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因