2010-11-08 46 views
28

Comment puis-je cibler tous les éléments d'un document à l'exception de un nom d'élément particulier?XPath pour obtenir tous les éléments enfants sauf un avec un nom spécifique?

Par exemple, je souhaite exclure les éléments terminate. Ils peuvent se produire tout au long du document.

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

J'ai essayé d'utiliser l'opérateur not(..) sans succès probablement parce que je l'utilise mal.

Et franchement essayer de Google «pas» est difficile!

Répondre

41

La XPath suivante devrait fonctionner

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

En outre, je pense que vous pouvez le faire avec cela aussi bien

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

Pour sélectionner * tous * les éléments, ne importe où dans le document, utilisez ceci: '// * [non (self :: a)]' – jpadvo

+8

"Je ne peux pas auto fin" =) – roryok

1

Si vous utilisez vous XPath 2.0 peut utiliser

/root/* except /root/terminate 

Ce qui fait ce que vous attendez. Il correspond aux nœuds qui existent dans la première séquence mais pas dans la seconde.

XPath 2.0 Specification - except operator