xpath以选择按属性值列表排除的节点



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

工作示例:

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

所需的替代方案:

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

如果您的xpath实现支持regex,您可以使用regex,也可以编写

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

可能会短一点。

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

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

也许是这样的??

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

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

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

最新更新