XPath: select child elements that do *not* have a specific name

<a>
   <b/>
   <c/>
   <d/>
   <b/>
   <e/>
</a>

How do I select those children of "a" that are not "b"?


Solution 1:

/a/*[not(self::b)]

Solution 2:

With XPath 2.0 you can even do

/a/(* except b)