22

我想知道是否有更短的方法来选择节点列表,而忽略那些在列表中指定属性值的节点

工作示例:

/item[not(@uid='id1') and not(@uid='id2')]

所需的替代方案:

/item[not(@uid in('id1','id2'))]
4

4 回答 4

26

您可以使用正则表达式 - 如果您的 xpath 实现支持它 - 或编写

/item[not(@uid='id1' or @uid='id2')]

这可能会更短一些。

于 2012-07-16T07:48:11.173 回答
7

如果属性名称列表很长,以下是处理这种情况的好方法

//item[not(contains('|attr1|attr2|attr3|attr4|attr5|attr6|attrN|', 
                    concat('|', @uid, '|')
                    )
           )]
于 2012-07-16T12:42:40.173 回答
4

也许是这样的??

/item[not(contains('id1 id2', @uid))]
于 2012-07-16T07:44:26.430 回答
0

至少在 Xpath 2 中,对序列的一般比较是成对和存在的,所以你可以写:

/item[not(@uid = ('id1','id2'))]
于 2012-07-16T22:07:57.943 回答