web-dev-qa-db-ja.com

属性値リストで除外するノードを選択するためのxpath

リストに属性値が指定されているノードを無視して、ノードのリストを選択するためのより短いアプローチがあるかどうかを知りたいです

実例:

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

望ましい代替案:

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

正規表現を使用するか(xpath実装でサポートされている場合)、次のように記述できます。

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

少し短いかもしれません。

22
Arne

属性名のリストが非常に長い場合、以下はこの状況を処理するための良い方法です

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

多分このようなもの?

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

少なくともXpath2では、シーケンスの一般的な比較はペアごとに存在的に実行されるため、次のように記述できます。

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