XPath 获取除具有特定名称的子元素之外的所有子元素?

Posted

技术标签:

【中文标题】XPath 获取除具有特定名称的子元素之外的所有子元素?【英文标题】:XPath to get all child elements except one with specific name? 【发布时间】:2011-05-06 12:17:37 【问题描述】:

如何定位文档中的所有元素除了特定元素名称?

例如,我想排除 terminate 元素。它们可以在整个文档中出现。

 <root>
     <terminate attr="1" />
     <other>
         The brown fox jumps over the fence. 
         <terminate>
            <b>stuff</b>
         </terminate>
     </other>
 </root>

我尝试使用 not(..) 运算符没有成功,可能是因为我用错了。

坦率地说,尝试在 Google 上“不”是很困难的!

【问题讨论】:

【参考方案1】:

如果您使用的是 XPath 2.0,则可以使用

/root/* except /root/terminate

你所期望的。它匹配存在于第一个序列中但不存在于第二个序列中的节点。

XPath 2.0 Specification - except operator

【讨论】:

【参考方案2】:

以下 xpath 应该可以工作

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

另外,我认为你也可以这样做

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

【讨论】:

要选择文档中任何位置的所有元素,请使用://*[not(self::a)] "我无法自行终止" =)

以上是关于XPath 获取除具有特定名称的子元素之外的所有子元素?的主要内容,如果未能解决你的问题,请参考以下文章

xpath按元素和属性查找节点,其中包含具有特定id的子元素

jQuery 获取除子元素 X 之外的子元素的 HTML

XPATH 选择类型元素名称为 xs:simpleType 的子元素

使用 jQuery 获取不是具有特定 CSS 类的容器的子元素的元素的后代

如何获取具有相同名称的元素并根据 XSLT 中的子节点值对它们进行排序

xpath选择父节点类型不同的子节点