2012-02-28 71 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