我知道这是一个简单的问题,但我无法弄清楚。 请考虑以下简单的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)]
(这不是诀窍)
答案 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