42 votes

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

Comment cibler tous les éléments d'un document à l' exception d' 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' not(..) sans succès probablement parce que je l'utilise mal.

Et franchement, essayer de « pas » sur Google est difficile !

63voto

InSane Points 7832

Le xpath suivant devrait fonctionner

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

Aussi, je pense que vous pouvez le faire avec ça aussi

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

4voto

Rudi Points 2888

Si vous utilisez XPath 2.0, vous pouvez 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.

Spécification XPath 2.0 - sauf opérateur

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X