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()
*-sibling
axe. +1 cependant.
Ce dont vous avez besoin est l' following-sibling
axe 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ù cc
le parent a un enfant bb
avec 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 bb
qui contient une 'zz'
chaîne dans tous les nœuds enfants du bb
nœud parent de cette bb
utilisation ..
, maintenant que nous pouvons accéder au cc
texte de retour.
J'espère que cette explication n'est pas complexe.