2011-11-02 19 views
9

quiero conseguir los nodos "paquete", que tienen un nieto "sistema" con un atributo "MTM", y el valor del atributo "MTM" es "2055 ". Para el documento de ejemplo siguiente, solo se debe devolver el primer nodo de paquete.XPath: Seleccionar nodos padres que tienen un nodo secundario con un atributo

utilizo

"/Database/Package[/SystemCompatibility/System[@mtm='2055']]" 

pero no funciona. ¿Qué pasa con esta expresión?

<?xml version="1.0" encoding="UTF-8"?> 
<Database version="300"> 
<Package id="6imb05ww" description="ThinkPad Modem Adapter"> 
    <SystemCompatibility> 
     <System mtm="8742" os="Windows XP" oslang="en" /> 
     <System mtm="2055" os="Windows XP" oslang="jp" /> 
    </SystemCompatibility> 
</Package> 
<Package id="6imb06ww" description="ThinkPad Modem Adapter"> 
    <SystemCompatibility> 
     <System mtm="3046" os="Windows XP" oslang="en" /> 
    </SystemCompatibility> 
</Package> 
</Database> 

Respuesta

13

Retire la / antes SystemCompatibility

/Database/Package[SystemCompatibility/System[@mtm='2055']] 
+0

Funciona, gracias. Mi mal, pensé que había intentado este enfoque, pero en realidad no lo hice. – kennyzx

2

Intente utilizar:

/Database/Package/descendant::System[@mtm='2055'] 

Usando el descendiente :: operador le permitirá obtener cualquier nieto Sistema de paquete. http://www.w3schools.com/xpath/xpath_axes.asp

+0

Esto devolverá sólo el nodo del sistema y no a todo el nodo Paquete –

+0

Ah, tienes razón. Yo malentendí la pregunta. Gracias por señalar eso. –

+2

¡Esto funcionaría con algunas modificaciones! Tenga en cuenta los soportes que encapsulan '/ Base de datos/paquete [descendiente :: Sistema [@ mtm = '2055']]' –

Cuestiones relacionadas