XPath:如何选择没有属性的节点?

Posted

技术标签:

【中文标题】XPath:如何选择没有属性的节点?【英文标题】:XPath: How to select nodes which have no attributes? 【发布时间】:2010-11-22 08:45:58 【问题描述】:

使用XPath,如何选择没有属性的节点(其中属性计数= 0)?

例如:

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1="bbbb"></node>
    <node></node> <- FIND THIS
</nodes>

【问题讨论】:

【参考方案1】:
//node[not(@*)]

这是选择文档中所有名为“node”的节点的XPath,没有任何属性。

【讨论】:

这很好,但它仍然可以找到&lt;node class=""&gt;&lt;/node&gt; 我们能做些什么吗? @MarekCzaplicki 请参阅下面的答案以解决此案例。 ***.com/questions/1323755/…【参考方案2】:
//node[count(@*)=0]

将选择所有具有零属性的

【讨论】:

【参考方案3】:

解决 Marek Czaplicki 的评论并扩展答案

//node[not(@*) or not(string-length(@*))]

.... 将选择所有具有零属性或所有属性为空的节点元素。如果它只是您感兴趣的特定属性,而不是所有属性,那么您可以使用

//node[not(@attribute1) or not(string-length(@attribute1))]

...这将选择所有没有名为attribute1 的属性或具有为空的attribute1 属性的节点元素。

也就是说,这些 xpath 表达式中的任何一个都会挑选出以下元素

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1=""></node> <!--This one -->
    <node attribute1="bbbb"></node>
    <node></node> <!--...and this one -->
</nodes>

参见 jsfiddle 示例 here

【讨论】:

以上是关于XPath:如何选择没有属性的节点?的主要内容,如果未能解决你的问题,请参考以下文章

无论特定 Id 如何,如何使用 XPath 选择类别 XML 节点?

使用 XPath 选择具有具体类的第一个节点

XPath:选择具有显式“xmlns”属性的节点

xpath 选择按属性值列表排除的节点

XPath如何选择具有相同值的子节点

如何使用多个 XPath 查询在 c# 中选择单个 XML 节点