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