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

use*_*621 38 xml xpath

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

<root>
  <a></a>
  <b></b>
  <c></c>
  <a></a>
  <d></d>
  <e></e>
  <a></a>
  <a></a>
</root>
Run Code Online (Sandbox Code Playgroud)

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

我正在寻找类似的东西

/root/*[not(a)]
Run Code Online (Sandbox Code Playgroud)

(这不是诀窍)

Lou*_*uis 10

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

/root/(* except a)
Run Code Online (Sandbox Code Playgroud)

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

/root/*[not(self::a)]
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果有人在这里试图在一个xsl:template/@match属性中使用它在XSLT 2.0中它将无法工作,因为@match采用虽然看起来像XPath表达式的模式,不是 XPath表达式.在这种情况下,XPath 1.0的解决方案将起作用.

  • @RadicalEdward 请停止在一个近 8 年前的帖子中骚扰每个人,仅仅因为您误解了所提出的问题。 (2认同)

BVH*_*BVH 7

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

/root/*[not(name()='a')]
Run Code Online (Sandbox Code Playgroud)