web-dev-qa-db-fra.com

XML xpath, récupère l'élément parent jusqu'à un élément spécifique

Je cherche la bonne syntaxe xpath pour obtenir un parent spécifique d'un élément. Exemple:

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]

Je veux obtenir le texte "THE TEXT" mais celui qui contient a [class=1] à l'intérieur du même div. Quelque chose comme ça:

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

Étant donné le XML

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

Vous pouvez trouver l'élément ancêtre le plus proche foo de baz en utilisant l'expression XPath:

// baz/ancêtre :: foo [1]

Qui sélectionnera le nœud d'élément foo de l'ID "i2".

Donc, dans votre exemple (si je comprends bien) une fois que vous avez obtenu l'élément "a" que vous voulez, vous pouvez obtenir "sauvegarder" l'arbre de l'ancêtre div le plus proche en ajoutant "/ ancestor :: div [1]" à votre expression.

61
alexbrn

tiliser:

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

Ceci sélectionne n'importe quel nœud de texte qui est un enfant de tout élément a qui a un attribut class avec la valeur '1' et que (l'élément a) est un descendant de tout élément div qui est un enfant de l'élément supérieur nommé root.

10