web-dev-qa-db-fra.com

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 apparaître 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 "non" sur Google est difficile!

36
John K

Le xpath suivant devrait fonctionner

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

Je pense que vous pouvez aussi le faire avec ça

/root/*[not(name()='terminate')]
54
Jagmag

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 le second.

Spécification XPath 2.0 - sauf opérateur

2
Rudi Kershaw