最初はXPath2.0のexcept使えないと無理じゃないか?って思っていたけど、よくよく考えたらそんなことなかったのでメモ。(きっとまた忘れると思うので、、、)
たとえば下記のようなXMLがあったとして
<root> <a> <c> <b /> </c> </a> <c> <b /> </c> </root>
aを祖先に持たないbだけを取りたいってときは、XPathは下記のように書ける。
//b[not(ancestor::a)]
ancestorはコンテキストノードの祖先の集合なので、そこにaが無いもの(not)といった指定になる。