2012-02-10 183 views

回答

13

如果你想測試的名稱,你幾乎擁有了:

//text()[name(parent::*)='p'] 

如果你試圖返回名稱:

name(//text()/parent::*) 
+0

這是比名稱(/ /文本()/ ..)更好的做法嗎? – emschorsch 2013-04-17 21:16:53

+1

不,'''和'parent ::'是一樣的。我通常使用'..',但這是一箇舊的答案,誰知道我當天在想什麼;-) – 2013-04-17 23:33:36

2
//text/..[@name='p'] 

這將讓<text>節點的所有的父母,只要父母一方的p一個name屬性。

+1

他的術語令人困惑,但他正在談論文本節點,而不是''元素......和元素名稱,而不是'name'屬性。 – LarsH 2012-02-11 03:12:30

+0

啊。謝謝,LarsH。 – 2012-02-12 05:45:07

4

僅供參考,術語點:一文本節點不是一個元素。

總之,要選擇當前節點的父最簡潔的方式是..

所以,當前節點(可以是文本節點)的父元素的名稱name(..)

這代到您的XPath表達式:

//text()[name(..)='p'] 

但不太迂迴的方式來寫,這將是

//p/text() 

(假設文檔中的p元素沒有名稱空間前綴)。無論哪種方式,您都選擇了名爲p的元素的子元素的所有文本節點。

+0

謝謝你的額外解釋。 – Xeoncross 2012-02-11 21:49:06