2012-05-30 16 views
18

La pregunta es bastante tonta, pero estoy completamente atascado. Quiero extraer nodos secundarios de un nodo en función de una condición. El XML es el siguiente:Xpath: seleccione el nodo basado en una condición (con nombre-local())

<a> 
<aCode>aaa</aCode> 
<aValue>bbb</aValue> 
</a> 

La expresión es obvia: //a[aCode='aaa']

Pero no puede conseguir la forma en que debe cambiar si es con espacios de nombres y tengo que usar local-name(). He probado el siguiente en http://www.xmlme.com/XpathTool.aspx y da un error de análisis:

/*[local-name()='a'][[local-name()='aCode']='aaa'] 

Alguien alguna idea de lo que debería hacer?

+0

-nombre local() es muy molesto! XPath pierde toda su elegancia cuando empiezas a usar espacios de nombres ... pero esta fue una pregunta útil – ropata

Respuesta

9

probar este

/a/aCode[text()='aaa'] 

o

//*[local-name() = 'aCode' and text() = 'aaa'] 

Ha utilizado // en el lugar equivocado.

+0

¡Gracias! Solo quería tener ambos hijos. – gisly

34

Probablemente significaba

//*[local-name()='a'][*[local-name()='aCode']='aaa'] 
+0

Sí, funciona, ¡muchas gracias! – gisly

+0

Aquí lo que '*' significa - '[* [local-name() = 'aCode'] = 'aaa']'? ¡Ayúdame a entender por favor! –

+1

'*' significa "cualquier elemento". – choroba

0

Ésta trabajo:

//*[local-name()='a'][*[local-name()='acode' and text()='a2']] 

y también éste:

//*[local-name()='a'][aCode[text()='a2']] 
Cuestiones relacionadas