XPath sélection d'un nœud avec une valeur d'attribut égale à la valeur d'attribut d'un autre nœud [fermé]

87
<grand id="grand">
  <parent>
    <child age="18" id="#not-grand"/>
    <child age="20" id="#grand"/> <!-- This is what I want to locate -->
  </parent>
</grand>

Quelqu'un peut-il me dire comment exprimer pour localiser le deuxième enfant?

Cela ne fonctionne pas ...

"/grand/parent/child[@id=concat('#',/grand/@id)]/@age"

Merci.


Je suis désolé. L'expression est OK. J'ai trouvé que j'avais des problèmes dans un autre domaine, pas dans l'expression elle-même.

Jin Kwon
la source
3
Votre xpath fonctionne bien pour moi.
dogbane
3
Idem pour moi - je viens de le tester ici et il sélectionne le deuxième élément enfant.
Andreas Dolk
2
Droite ... L'expression est OK. Je suis désolé. J'ai commis des erreurs dans l'expression (préfixe d'espace de noms) et dans le document d'instance. Merci.
Jin Kwon

Réponses:

95

Ce XPath est spécifique à l'extrait de code que vous avez fourni. Pour sélectionner <child>avec identifiant que #grandvous pouvez écrire //child[@id='#grand'].

Pour avoir de l'âge //child[@id='#grand']/@age

J'espère que cela t'aides

Vaman Kulkarni
la source
1
Merci Vaman. Ça m'a aidé. Je voulais dire renvoyer l'expression ('/ grand / @ id') pour une évaluation de temps et non la valeur ('# grand') qui devrait être évaluée en premier.
Jin Kwon
Que faire si mon XML a une liste de section avec un attribut de nom, comment sélectionner une sous-source de données? Exemple: <section name="valuation"> <capital-value> some data </capital-value> <location> some data </location> </section> <section name="subject-property"> <address>72 Gordon Avenue</address> <postcode>HA7 3QS</postcode> <bedrooms>2</bedrooms> </section>
Sanjay Sahani le
30

Je pense que c'est ce que tu veux:

/grand/parent/child[@id="#grand"]
MarcoS
la source
2
Merci MarcoS. Je voulais dire faire référence à l'expression ('/ grand / @ id') pour une évaluation du temps et non à la valeur ('# grand') qui devrait être évaluée en premier.
Jin Kwon
2
@ jin-kwon: Je vois. Donc, vous êtes XPath est très bien.
MarcoS