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 l' <cc>utilisation de XPath si <bb>c'est le cas zz?
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 l' <cc>utilisation de XPath si <bb>c'est le cas zz?
Réponses:
Vous ne savez pas pourquoi tout le monde demande des frères et sœurs, vous pouvez également vérifier les <bb/>éléments correspondant au prédicat du <a/>prédicat de:
//a[bb/text() = "zz"]/cc/text()
*-siblingaxe. +1 cependant.
Ce dont vous avez besoin est l' following-siblingaxe XPath
//a/bb[text()="zz"]/following-sibling::cc[1]/text()
Testez 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'y a que des "axes XPath" pour les frères suivants et les frères précédents, vous pouvez utiliser l'un d'entre eux si la position est fixe.
Mais mieux:
recherchez où ccle parent a un enfant bbavec une valeur 'zz':
//cc[../bb='zz']
//a[bb = 'zz']/cc.
Tout d'abord, votre exemple n'est pas un XML bien formé. Compte tenu de cela et que vous ne décrivez pas très bien vos intentions (que voulez-vous sélectionner exactement à 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()
Veuillez regarder la spécification , elle contient des exemples très lisibles dont 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ù se trouve a).
..: sélectionne le parent du nœud actuel.
[../bb='zz ']: où la valeur de l'élément frère' bb 'est zz.
Une autre solution à ce problème est
//bb[contains(.,'zz')]/../cc/text()
Explication : Tout ce bbqui contient une 'zz'chaîne dans tous les nœuds enfants du bbnœud parent de cette bbutilisation .., maintenant que nous pouvons accéder au cctexte de retour.
J'espère que cette explication n'est pas complexe.