XPath wybieranie węzła z pewną wartością atrybutu równa się wartości atrybutu innego węzła [zamknięte]


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>

Czy ktoś może mi powiedzieć, jak wyrazić zgodę na zlokalizowanie drugiego dziecka?

To nie działa ...

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

Dziękuję Ci.


Przepraszam. Wyrażenie jest OK. Okazało się, że mam pewne problemy w innym obszarze, a nie samo wyrażenie.


3
Twój xpath działa dobrze dla mnie.
dogbane

3
To samo dotyczy mnie - właśnie przetestowałem to tutaj i wybiera drugi element potomny.
Andreas Dolk

2
Racja ... Wyrażenie jest OK. Przepraszam. Popełniłem kilka błędów w wyrażeniu (przedrostek przestrzeni nazw) i dokumencie instancji. Dziękuję Ci.
Jin Kwon

Odpowiedzi:


98

Ta ścieżka XPath jest specyficzna dla podanego fragmentu kodu. Aby wybrać <child>z identyfikatorem, jak #grandmożesz pisać //child[@id='#grand'].

Aby się zestarzeć //child[@id='#grand']/@age

Mam nadzieję że to pomoże


1
Dziękuję Vaman. Pomogło. Miałem na myśli odwołanie się do wyrażenia („/ grand / @ id”) do jednorazowej oceny, a nie do wartości („# grand”), która powinna być oceniona jako pierwsza.
Jin Kwon

co się stanie, jeśli mój XML ma listę sekcji z atrybutem nazwy, to jak wybrać subDataSource? Przykład: <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

Myślę, że tego chcesz:

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

2
Dziękuję MarcoS. Miałem na myśli odwołanie się do wyrażenia („/ grand / @ id”) do jednorazowej oceny, a nie do wartości („# grand”), która powinna być oceniona jako pierwsza.
Jin Kwon

2
@ jin-kwon: Rozumiem. Więc jesteś XPath jest w porządku.
MarcoS
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.