xpath选择除属性值列表之外的节点

时间:2012-07-16 07:37:29

标签: xml xpath contains xmlnodelist

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

工作示例:

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

期望的替代方案:

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

4 个答案:

答案 0 :(得分:22)

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

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

可能会短一些。

答案 1 :(得分:5)

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

//item[not(contains('|attr1|attr2|attr3|attr4|attr5|attr6|attrN|', 
                    concat('|', @uid, '|')
                    )
           )]

答案 2 :(得分:3)

也许是这样的事情?

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

答案 3 :(得分:0)

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

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