web-dev-qa-db-ja.com

XML xpath、特定の要素まで親要素を取得

要素の特定の親を取得するための正しいxpath構文を探しています。例:

root
   |- div
   |     |
   |     |----??? ---|
   |     |           |-a [class=1]
   |     |                      |- text[ A TEXT I DON'T WANT]
   |     |
   |     |
   |     |
   |     |-text[THE TEXT]
   |
   |-div 
   |    |-text[THE TEXT I DON'T WANT]
   |
   |-div 
   |    |-text[THE TEXT I DON'T WANT]

「THE TEXT」というテキストを取得したいが、a [class=1]同じdiv内。このようなもの:

//div//a[@class=1]/text[contains(.,'A TEXT')]/parent::*/parent::*.... <till div element>  /text
31
Nir Bentzy

XMLを考える

 <?xml version = "1.0"?> 
 <root> 
 <foo id = "id1"> 
 <foo id = "i2"> 
 <baz />
 </ foo> 
 </ foo> 
 </ root>

XPath式を使用して、bazから最も近い祖先 foo要素を見つけることができます。

// baz/ancestor :: foo [1]

Id "i2"のfoo要素ノードを選択します。

したがって、あなたの例では(私が正しいと理解している場合)、必要な「a」要素を取得したら、「/ ancestor :: div [1]」を追加することで、ツリーを最も近い祖先divに「バックアップ」できます表現。

61
alexbrn

使用

/root/div[.//a[@class='1']]/text()

これは、値が'1'a属性を持ち、そのclass要素が子孫であるa要素の子であるテキストノードを選択しますdivという名前の一番上の要素の子であるroot要素の.

10