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.


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


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"]

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.