2011-05-20 46 views
5

我正在使用HtmlAgilityPack。XPath搜索所有文本節點,而不是任何其他子節點的內部文本

我將鼠標懸停在父節點上,其子節點顯示多個#text節點。 XPath值顯示爲/code[1]/#text[1]。我嘗試使用//#text讓所有的文本節點,但我得到這個錯誤:

錯誤:Expression must evaluate to a node-set.

我已經試過//text和得到什麼,但沒有錯誤。

+0

什麼是表示'/代碼[1] /#文本[1]'作爲XPath的?這不是有效的XPath。 – LarsH 2011-05-20 22:04:42

+0

@LarsH在當前的HtmlNode(name = code)的ChildNodes中,打開第一個#text節點並向下滾動到VS 2008調試器中的XPath,它將顯示XPath。 – 2011-05-20 23:50:23

+0

好吧,我不熟悉VS 2008調試器,但它向你展示的「XPath」並不是真正的XPath。 :-('#'不是語法的一部分 – LarsH 2011-05-21 02:35:50

回答

5

您需要使用text()來獲取文本節點。要獲取文檔中的所有文本節點,請使用//text()

specification

text() matches any text node.

+0

這是有用的。我有父節點,並且我做了parent.SelectNodes(「// text()」),並且獲得了父節點的所有文本節點,但也在文檔中的父級以下的所有其他文本節點 - 奇怪!我必須做parent.SelectNodes(parent.XPath +「// text()」)來獲取所有的文本,但不會給這個 – 2011-05-20 21:48:12

+0

與'parent.SelectNodes(「text()」)一起去''我不明白你的問題的最後部分... – lonesomeday 2011-05-20 21:52:21

+4

@Chuck,你得到的事實所有文本節點都是父節點的後代,正是'//'的用途''''''是'descendant ::'的縮寫,如果你只是希望文本節點是父節點的直接子節點, child :: text()''。這個縮寫只是'text()',就像@lonesome建議的一樣。 – LarsH 2011-05-20 22:09:40

相關問題