2012-02-28 35 views
2

我已经将网页加载到HTML Agility Pack并具有DOM。我想使用XPATH来提取页面上的所有文本(但不是在<script>标签中找到的JavaScript)。XPath“不”。忽略具有特定标记的分支

我想我需要一个// text(),然后'不'来忽略其中有<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)

有什么建议?

回答

2

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

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

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

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

这个工作.... // * [not(self :: script)]/text()(其他没有出于某种原因)谢谢! – DJA 2012-02-28 21:49:33