Я выбирал все атрибуты id
и все шло хорошо, тогда требования одного дня изменились, и теперь я должен выбрать все, кроме одного!
Учитывая следующий пример:
<root>
<structs id="123">
<struct>
<comp>
<data id="asd"/>
</comp>
</struct>
</structs>
</root>
Я хочу выбрать все атрибуты id
, кроме одного в /root/structs/struct/comp/data
Обратите внимание, что Xml может отличаться.
Это означает, что я действительно хочу: учитывая любое дерево XML, я хочу выбрать все атрибуты id
, за исключением атрибута элемента /root/structs/struct/comp/data
Я попробовал следующее:
//@id[not(ancestor::struct)]
Это вроде работало, но я хочу указать полный путь к оси предка, чего я не смог
//@id[not(contains(name(), 'data'))]
Это не сработало, поскольку селектор имени возвращает имя базового узла, который является атрибутом, а не его родительским элементом