从XPath中的选择中排除某些元素

时间:2009-07-01 11:34:37

标签: xml xpath

我知道这是一个简单的问题,但我无法弄清楚。 请考虑以下简单的XML文档:

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

使用XPath选择节点<b><e>的最佳方法是什么?

我正在寻找像

这样的东西
/root/*[not(a)]

(这不是诀窍)

4 个答案:

答案 0 :(得分:57)

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

答案 1 :(得分:10)

回答在XPath 2.0中添加它,您可以使用except

/root/(* except a)

对于XPath 1.0,Tomalak指出,这是执行此操作的标准方法:

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

顺便说一下,如果有人在xsl:template/@match属性中尝试在XSLT 2.0中使用此功能,那么它将无效,因为@match采用的模式虽然看起来像 XPath表达式是不是 XPath表达式。在这种情况下,XPath 1.0的解决方案将起作用。

答案 2 :(得分:7)

我意识到这是一个老问题,但我最近遇到了类似的问题并使用以下xpath来解决它:

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

答案 3 :(得分:-2)

你试过了吗?

/根/ B | /根/ C |根/ d | /根/ E