XPath selezionando un nodo con un valore di attributo uguale al valore di attributo di un altro nodo [chiuso]


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

Qualcuno può dirmi come esprimere per localizzare il secondo figlio?

Questo non funziona ...

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

Grazie.


Mi dispiace. L'espressione è OK. Ho scoperto di avere dei problemi in un'altra area non nell'espressione stessa.


3
Il tuo xpath funziona bene per me.
dogbane

3
Lo stesso per me: l'ho appena testato qui e seleziona il secondo elemento figlio.
Andreas Dolk

2
Giusto ... L'espressione va bene. Mi dispiace. Ho commesso alcuni errori nell'espressione (prefisso dello spazio dei nomi) e nel documento dell'istanza. Grazie.
Jin Kwon

Risposte:


98

Questo XPath è specifico per lo snippet di codice fornito. Per selezionare <child>con ID come #grandpuoi scrivere //child[@id='#grand'].

Per invecchiare //child[@id='#grand']/@age

Spero che sia di aiuto


1
Grazie Vaman. Ha aiutato. Intendevo riferire l'espressione ('/ grand / @ id') per una valutazione una tantum e non il valore ('# grand') che dovrebbe essere valutato per primo.
Jin Kwon

cosa succede se il mio XML ha un elenco di sezioni con l'attributo name, come selezionare è come subDataSource? Esempio: <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

30

Penso che questo sia quello che vuoi:

/grand/parent/child[@id="#grand"]

2
Grazie MarcoS. Intendevo riferire l'espressione ('/ grand / @ id') per una valutazione una tantum e non il valore ('# grand') che dovrebbe essere valutato per primo.
Jin Kwon

2
@ jin-kwon: capisco. Quindi, il tuo XPath va benissimo.
MarcoS
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.