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

Zan*_*oni 86 xpath

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

例如:

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1="bbbb"></node>
    <node></node> <- FIND THIS
</nodes>
Run Code Online (Sandbox Code Playgroud)

48k*_*ocs 138

//node[not(@*)]
Run Code Online (Sandbox Code Playgroud)

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


eri*_*rik 22

//node[count(@*)=0]
Run Code Online (Sandbox Code Playgroud)

将选择具有零属性的所有<node>


phi*_*hil 6

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

//node[not(@*) or not(string-length(@*))]
Run Code Online (Sandbox Code Playgroud)

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

//node[not(@attribute1) or not(string-length(@attribute1))]
Run Code Online (Sandbox Code Playgroud)

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

也就是说,以下两个xpath表达式中的任何一个都会选择以下元素

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1=""></node> <!--This one -->
    <node attribute1="bbbb"></node>
    <node></node> <!--...and this one -->
</nodes>
Run Code Online (Sandbox Code Playgroud)

在这里查看jsfiddle示例