2012-06-21 23 views
6

Estoy tratando de probar si un atributo en un antecesor de un elemento no es igual a una cadena.prueba de Xpath para el atributo ancestro cadena no igual

Aquí está mi XML ...

<aaa att="xyz"> 
<bbb> 
<ccc/> 
</bbb> 
</aaa> 
<aaa att="mno"> 
<bbb> 
<ccc/> 
</bbb> 
</aaa> 

Si estoy actuando sobre el elemento de ccc, estoy tratando de probar que su abuelo @att aaa no es igual a "XYZ".

Actualmente tengo este ...

ancestor::aaa[not(contains(@att, 'xyz'))] 

Gracias!

+0

Ancestro de * qué elemento *? ¿Te refieres a un elemento que tiene al menos un elemento secundario? –

+0

Disculpe, tenía corchetes alrededor del elemento en cuestión. Ver mi nueva línea después del XML de muestra. – Jeff

Respuesta

15

Suponiendo que al decir un antepasado de un elemento que usted se refiere a un elemento con elementos secundarios, esta expresión XPath debe hacer:

//*[*/ccc][@att != 'xyz'] 

selecciona

  1. todos los nodos
  2. que tienen al menos un <ccc> nodo nieto
  3. y que tienen un att atributo cuyo valor no es xyz.

Actualización: prueba restringido a los abuelos de <ccc>.

Actualización 2: Adaptado a su pregunta revisada:

//ccc[../parent::aaa/@att != 'xyz'] 

Selecciona

  1. todos <ccc> elementos
  2. que tiene un abuelo <aaa> con su atributo att conjunto a un valor que es no xyz
+0

Gracias por la respuesta. Sin embargo, estoy buscando probar solo en el aaa que es el abuelo de ccc. De su explicación, esta prueba atraviesa todos los nodos aa en el documento. – Jeff

+0

@Jeff: Esto no salió muy claro de su pregunta; He actualizado mi respuesta ahora. –

+0

Lo siento, he actualizado mi pregunta original. – Jeff

Cuestiones relacionadas