J'ai le document suivant:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
Comment puis-je obtenir la valeur de <cc>
en utilisant XPath si <bb>
_ est zz
?
Vous ne savez pas pourquoi tout le monde interroge un frère ou une soeur, vous pouvez également rechercher des éléments <bb/>
Correspondant au prédicat du prédicat de <a/>
:
//a[bb/text() = "zz"]/cc/text()
Vous avez besoin de following-sibling
Axe XPath
//a/bb[text()="zz"]/following-sibling::cc[1]/text()
Testez le Xpath ici: http://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625
Q: Comment sélectionner un nœud à l'aide de XPath si le nœud frère a une valeur spécifique?
Comme il n’existe que des "XPath Axes" pour les frères suivants et les frères précédents, vous pouvez utiliser l’un d’eux si la position est fixe.
Mais mieux: Cherchez cc
où le parent a l'enfant bb
avec la valeur 'zz'
:
//cc[../bb='zz']
Tout d’abord, votre exemple n’est pas un XML bien formé. En négligeant cela et en ne décrivant pas très bien vos intentions (que voulez-vous exactement sélectionner à quelle condition?), Je suppose que vous voulez faire ceci:
//cc[preceding-sibling::bb[text()="zz"]]/text()
Il sélectionne
TEXT VALUES OF ALL <CC> ELEMENTS
//cc /text()
THAT HAVE A PRECEDING SIBLING <BB>
[preceding-sibling::bb ]
THAT HAS TEXT VALUE EQUAL TO "zz"
[text()="zz"]
Vous pourriez écrire est aussi comme
//bb[text()="zz"]/following-sibling::cc/text()
S'il vous plaît regardez la spécification , il a quelques très bien lisible exemples à partir de laquelle vous apprendrez beaucoup.
//a/cc[../bb='zz']/text()
// a: Sélectionne tous les éléments 'a' peu importe où ils se trouvent.
// a/cc: Sélectionne les éléments 'cc' qui sont les enfants de l'élément 'a' (peu importe où a est).
..: Sélectionne le parent du nœud actuel.
[../bb='zz ']: où la valeur de l'élément' bb 'frère est zz.
Une autre solution à ce problème est
//bb[contains(.,'zz')]/../cc/text()
Explication: N'importe quel bb
qui contient 'zz'
chaîne dans tous les nœuds enfants de bb
, puis passage au nœud parent de cette bb
à l'aide de ..
, maintenant que nous pouvons accéder au cc
ainsi retourner le texte.
J'espère que cette explication n'est pas complexe.