Тест XPath, чтобы увидеть, имеют ли все атрибуты детей определенное значение - PullRequest
2 голосов
/ 02 марта 2011

Это простой XML-файл, в котором я хочу выполнить тест XPath:

<Prop>
    <Attx>
        <Atty tip="ddd"></Atty>
        <Atty tip="ddd"></Atty>
        <Atty tip="ddd"></Atty>
    </Attx>   
</Prop>

Я хотел бы видеть, если все tip атрибуты всех Atty элементы равны ddd.

Я реализовал это с помощью следующего запроса XPath:

count(/Prop/Attx/Atty[@tip='ddd'])=count(/Prop/Attx/Atty)

Есть ли более простой запрос, который может выполнить тот же тест?

Ответы [ 2 ]

4 голосов
/ 02 марта 2011

Это выражение вернет true, только если все элементы Atty имеют атрибут tip со значением "ddd":

not(//Atty[not(@tip = 'ddd')])

В качестве альтернативы, следующее выражение также вернет true, если есть элементы Atty без атрибута tip . Он возвращает false только в том случае, если есть элемент Atty с атрибутом tip , значение которого отличается от "ddd":

not(//Atty[@tip and not(@tip = 'ddd')])

Путь, конечно, можно сделать более конкретным, а не " // " в любом месте. Должно работать в XPath 1.0 и 2.0.

4 голосов
/ 02 марта 2011

Это выражение XPath:

/Prop/Attx/Atty/@tip != 'ddd'

Значение : есть хотя бы один атрибут @tip, не равный 'ddd'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...