XPath Auswahl eines Knotens mit einem Attributwert entspricht dem Attributwert eines anderen Knotens [geschlossen]


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

Kann mir jemand sagen, wie ich mich ausdrücken soll, um das zweite Kind zu finden?

Das funktioniert nicht ...

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

Danke dir.


Es tut mir Leid. Der Ausdruck ist OK. Ich stellte fest, dass ich in anderen Bereichen einige Probleme hatte, nicht im Ausdruck selbst.


3
Dein xpath funktioniert gut für mich.
Dogbane

3
Das gleiche gilt für mich - habe es gerade hier getestet und es wählt das zweite untergeordnete Element aus.
Andreas Dolk

2
Richtig ... Der Ausdruck ist OK. Es tut mir Leid. Ich habe einige Fehler im Ausdruck (Namespace-Präfix) und im Instanzdokument gemacht. Danke dir.
Jin Kwon

Antworten:


93

Dieser XPath ist spezifisch für das von Ihnen bereitgestellte Code-Snippet. <child>Mit ID auswählen, wie #grandSie schreiben können //child[@id='#grand'].

Alter bekommen //child[@id='#grand']/@age

Hoffe das hilft


1
Danke Vaman. Es half. Ich meinte, den Ausdruck ('/ grand / @ id') für eine einmalige Auswertung zu verwenden, nicht den Wert ('# grand'), der zuerst ausgewertet werden sollte.
Jin Kwon

Was passiert, wenn meine XML-Liste eine Liste mit Abschnitten mit dem Attribut name enthält? Wie wählt man sie dann als subDataSource aus? Beispiel: <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

Ich denke, das ist was du willst:

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

2
Vielen Dank, MarcoS. Ich meinte, den Ausdruck ('/ grand / @ id') für eine einmalige Bewertung zu verwenden, nicht den Wert ('# grand'), der zuerst ausgewertet werden sollte.
Jin Kwon

2
@ Jin-Kwon: Ich verstehe. Also, du bist XPath ist in Ordnung.
MarcoS
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.