ChatGPT解决这个技术问题 Extra ChatGPT

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

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

例如:

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

4
48klocs
//node[not(@*)]

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


这很好,但它仍然发现<node class=""></node>我们可以做些什么?
@MarekCzaplicki 请参阅下面的答案来解决这种情况。 stackoverflow.com/questions/1323755/…
e
erik
//node[count(@*)=0]

将选择所有具有零属性的


p
phil

解决 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