2

以下示例说明了我的问题:

<nodes>
   <node at1="1" at2="2"> 12 </node>
   <node at1="1" at2="2" at3="3"> 123 </node>
   <node at1="1"> 1 </node>        <-----find this node
</nodes>

/nodes/node[@at1]返回所有三个节点,但我正在寻找只有“at1”属性而没有其他属性的节点。

4

1 回答 1

4

这发现node有属性@at1,没有其他属性:

//node[@at1 and count(@*) = 1]

如果你想允许另一个可选属性x,你可以这样做:

//node[@at1 and count(@*) - count(@x) = 1]

如果你有xmlns这样的命名空间声明的节点怎么办:

<nodes>
   <node at1="1"> 1 </node>
   <node at1="2" xmlns="http://xyz"> 2 </node>
</nodes>

您可以像这样匹配两个节点:

//*[name()='node' and @at1 and count(@*) = 1]

仅匹配具有 的节点xmlns

//*[name()='node' and @at1 and count(@*) = 1 and namespace-uri()='http://xyz']

只匹配没有的节点xmlns

//*[name()='node' and @at1 and count(@*) = 1 and namespace-uri()='']
于 2013-10-06T06:42:22.290 回答