我已将网页加载到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)
有什么建议吗?
答案 0 :(得分:2)
您的第一次尝试拒绝所有作为脚本元素的文本节点,而您的第二次尝试拒绝所有具有脚本节点子节点的文本节点。当然,在这两种情况下,情况都是不对的。
您没有清楚地解释您的要求,但我想您要拒绝所有将脚本元素作为其父元素的文本节点,这将是
//text()[not(parent::script)]
或
//*[not(self::script)]/text()