web-dev-qa-db-ja.com

XPathでの選択から特定の要素を除外する

これは簡単な質問ですが、わかりません。次の単純なXMLドキュメントについて考えてみます。

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

ノードを選択する最良の方法は何ですか<b> 使って <e> XPathを使用していますか?

私はのようなものを探しています

/root/*[not(a)]

(これはトリックを行いません)

38
/root/*[not(self::a)]
61
Tomalak

XPath 2.0でそれを追加するために答えると、exceptを使用できます。

/root/(* except a)

XPath 1.0では、Tomalakが指摘しましたが、これは標準的な方法です。

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

ところで、XSLT 2.0でこれをxsl:template/@match属性@matchは、lookはXPath式と似ていますが、not XPath式であるパターンを取ります。この場合、XPath 1.0のソリューションが機能します。

10
Louis

これは古い質問であることに気づきましたが、最近同様の問題が発生し、次のxpathを使用して解決しました。

/root/*[not(name()='a')]
7
BVH