Ответ 1
Вы можете использовать regex - если ваша реализация xpath поддерживает его - или пишите
/item[not(@uid='id1' or @uid='id2')]
который может быть немного короче.
Я хотел бы знать, существует ли более короткий подход к выбору списка узлов, игнорирующих те, которые имеют значение атрибута, указанное в списке
Рабочий пример:
/item[not(@uid='id1') and not(@uid='id2')]
Желаемая альтернатива:
/item[not(@uid in('id1','id2'))]
Вы можете использовать regex - если ваша реализация xpath поддерживает его - или пишите
/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'))]