2011-05-19 25 views
63
<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 me puede decir cómo expresar para localizar al segundo hijo?XPath seleccionando un nodo con algún valor de atributo igual al valor de atributo de otro nodo

Esto no funciona ...

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

Gracias.


Lo siento. La expresión está bien. Descubrí que tengo algunos problemas en otras áreas, no en la expresión en sí misma.

+3

Su XPath funciona bien para mí. – dogbane

+3

Lo mismo para mí - [lo he probado aquí] (http://www.mizar.dk/XPath/Default.aspx) y selecciona el segundo elemento secundario. –

+1

Derecha ... La expresión está bien. Lo siento. He cometido algunos errores en la expresión (prefijo de espacio de nombres) y en el documento de instancia. Gracias. –

Respuesta

68

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

Para obtener la edad //child[@id='#grand']/@age

Esperanza esto ayuda

+1

Gracias Vaman. Eso ayudo. Quise referir la expresión ('/ grand/@ id') para una evaluación de una vez, no el valor ('# grandioso') que se debe evaluar primero. –

+3

Esta debería ser la respuesta aceptada, ya que es mucho más fácil de entender que la solución del OP. – Bashevis

21

Creo que esto es lo que quiere:

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

Gracias MarcoS. Quise referir la expresión ('/ grand/@ id') para una evaluación de una vez, no el valor ('# grandioso') que se debe evaluar primero. –

+2

@ jin-kwon: Ya veo. Entonces, estás XPath está bien. – MarcoS

Cuestiones relacionadas