2012-02-10 27 views
5

テキストノードのスコープから親の名前を取得する方法を理解しようとしています。XPathで親要素名を取得

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

現在のノードの親の名前を取得するにはどうすればよいですか?

答えて

13

は、あなたがほとんどそれを持っていた:

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

あなたが名前を返すしようとしている場合:FYI

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

これは名前(// text()/ ..)よりも良い方法ですか? – emschorsch

+1

いいえ、 '..'は' parent :: 'と同じことです。私はたいてい '..'を使用しますが、これは古い答えで、私がその日何を考えていたかを知っています;-) –

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

これは限り親がpname属性を持つよう<text>ノードのすべての親を取得します。あなたが名前をテストしようとしている場合

+1

彼の専門用語は混乱しますが、彼は ''要素ではなく、テキストノードについて話しています。また、 'name'属性ではなく要素名です。 – LarsH

+0

Ah。ありがとう、LarsH。 –

4

を、用語のポイント:テキストノードは要素ではありません。

とにかく、現在のノードの親を選択するための最も簡潔な方法は、だから、..

、(テキストノードかもしれない)現在のノードの親要素の名前ですname(..)

あなたのXPath式にこれを代入:

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

しかし、それは

なり書き込みにレス回り道

(ドキュメント内のp要素に名前空間接頭辞がないものとします)。いずれにせよ、pという名前の要素の子であるすべてのテキストノードを選択しています。

+0

ありがとうございます。 – Xeoncross

関連する問題