Подтвердить что ты не робот

Как фильтровать с XPath для всех элементов без определенного атрибута

Мой XPath немного ржавый... Скажем, у меня есть этот простой XML файл:

<?xml version="1.0" encoding="utf-8" ?>
<States xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<States>
<StateProvince name="ALABAMA" abbrev="AL" />
....
<StateProvince name="AMERICAN SAMOA" abbrev="AS" territory="true"  />
</States>
</States>

Я хотел бы запустить простой запрос XPath, чтобы разобрать все истинные состояния (так что не тяните в состояниях, где area = true). Я попробовал \StateProvince [@territory!= 'True'], но я получил нуль. Другие варианты, похоже, терпят неудачу. Кажется, это должно быть просто, но не найти то, что я хочу.

Любая помощь была оценена.

4b9b3361

Ответ 1

Одно выражение XPath, которое выбирает нужные элементы:

        /*/States/StateProvince[not(@territory='true')]

Обратите внимание на, чтобы избежать аббревиатуры //, когда это возможно, поскольку это приводит к сканированию всего документа (поддерева, корневого в контексте node).

Вышеупомянутое выражение XPath избегает использования сокращения // , учитывая структуру первоначально предоставленного XML-документа,

Только если структура документа XML полностью неизвестна (и выражение XPath предназначено для использования во многих XML-документах с неизвестной структурой) следует использовать аббревиатуру //.

Ответ 2

Вы очень близки:

//StateProvince[not(@territory) or @territory != 'true']

Должен получить нужный результат.

Ответ 3

Это должно работать:

//StateProvince[not(@territory='true')]