XPath pour obtenir tous les éléments enfants sauf un avec un nom spécifique?

Comment cibler tous les éléments d'un document sauf un nom d'élément particulier?

Par exemple, je veux 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!

28
demandé sur Rudi Kershaw 2010-11-08 08:38:40

2 réponses

Le xpath suivant devrait fonctionner

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

Aussi, je pense que vous pouvez le faire avec ceci aussi

/root/*[not(name()='terminate')]
44
répondu Jagmag 2010-11-08 05:42:26

Si vous utilisez XPath 2.0, vous pouvez utiliser

/root/* except /root/terminate

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

Spécification XPath 2.0-sauf opérateur

1
répondu Rudi Kershaw 2017-12-13 11:57:24