Xpath для выбора узлов, исключая список атрибутов

Я хотел бы знать, существует ли более короткий подход к выбору списка узлов, игнорирующих те, которые имеют значение атрибута, указанное в списке

Рабочий пример:

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

Желаемая альтернатива:

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

Ответы

Ответ 1

Вы можете использовать regex - если ваша реализация xpath поддерживает его - или пишите

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

который может быть немного короче.

Ответ 2

Если список имен атрибутов очень длинный, это хороший способ справиться с этой ситуацией.:

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

Ответ 3

Может быть, что-то вроде этого?

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

Ответ 4

По крайней мере, в Xpath 2 общие сравнения по последовательностям выполняются попарно и экзистенциально, поэтому вы можете написать:

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