XPath to get all child elements except one with specific name?

John K picture John K · Nov 8, 2010 · Viewed 35.4k times · Source

How do I target all elements in a document except a particular element name?

For example I want to exclude the terminate elements. They can occur throughout the document.

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

I've tried using the not(..) operator without success likely because I'm using it wrong.

And frankly trying to Google 'not' is tough!

Answer

Jagmag picture Jagmag · Nov 8, 2010

The following xpath should work

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

Also, i think you can do it with this as well

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