XPath seleccionando un nodo con algún valor de atributo igual al valor de atributo de otro nodo [cerrado]


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>

¿Alguien puede decirme cómo expresarme para localizar al segundo hijo?

Esto no funciona ...

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

Gracias.


Lo siento. La expresión está bien. Descubrí que tenía algunos problemas en otra área, no en la expresión en sí.


3
Tu xpath funciona bien para mí.
dogbane

3
Lo mismo para mí, solo lo probé aquí y selecciona el segundo elemento secundario.
Andreas Dolk

2
Bien ... La expresión está bien. Lo siento. Cometí algunos errores en la expresión (prefijo del espacio de nombres) y el documento de instancia. Gracias.
Jin Kwon

Respuestas:


95

Este XPath es específico para el fragmento de código que proporcionó. Para seleccionar <child>con id como #grandse puede escribir //child[@id='#grand'].

Para envejecer //child[@id='#grand']/@age

Espero que esto ayude


1
Gracias Vaman. Eso ayudo. Me refiero a referir la expresión ('/ grand / @ id') para una evaluación única, no el valor ('# grand') que debe evaluarse primero.
Jin Kwon

¿Qué pasa si mi XML tiene una lista de sección con atributo de nombre, entonces cómo seleccionar es como subDataSource? Ejemplo: <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

Creo que esto es lo que quieres:

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

2
Gracias MarcoS. Me refiero a referir la expresión ('/ grand / @ id') para una evaluación única, no el valor ('# grand') que debe evaluarse primero.
Jin Kwon

2
@ jin-kwon: Ya veo. Entonces, tu XPath está bien.
MarcoS
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.