2010-11-08 20 views
28

¿Cómo apuntar todos los elementos en un documento excepto un nombre de elemento particular?XPath para obtener todos los elementos secundarios excepto uno con un nombre específico?

Por ejemplo, quiero excluir los elementos terminate. Pueden ocurrir a lo largo del documento.

<root> 
    <terminate attr="1" /> 
    <other> 
     The brown fox jumps over the fence. 
     <terminate> 
      <b>stuff</b> 
     </terminate> 
    </other> 
</root> 

He intentado usar el operador not(..) sin éxito probablemente porque lo estoy usando mal.

¡Y francamente, tratar de Google 'no' es difícil!

Respuesta

41

El siguiente XPath debe trabajar

/root/*[not(self::terminate)] 

Además, creo que se puede hacer con esto también

/root/*[not(name()='terminate')] 
+1

Para seleccionar * todos * los elementos, en cualquier parte del documento, utilice esto: '// * [no (self :: a)]' – jpadvo

+8

"no puedo terminar auto" =) – roryok

1

Si está utilizando XPath 2.0 se puede utilizar

/root/* except /root/terminate 

que hace lo que esperarías. Coincide con los nodos que existen en la primera secuencia pero no en la segunda.

XPath 2.0 Specification - except operator

Cuestiones relacionadas