我知道这是一个简单的问题,但我无法弄清楚.考虑以下简单的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的解决方案将起作用.
我意识到这是一个老问题,但我最近遇到了类似的问题并使用以下xpath来解决它:
/root/*[not(name()='a')]
Run Code Online (Sandbox Code Playgroud)