Нужен XPath, который проверит значение атрибута любого ребенка, внука или правнука и т. Д. - PullRequest
2 голосов
/ 15 сентября 2010

Итак, учитывая этот XML ...

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <tree dah="false">
        <tree dah="false">
            <tree dah="false"/>
            <tree dah="false"/>
        </tree>
        <tree dah="false">
            <tree dah="true"/>
            <tree dah="false"/>
        </tree>
    </tree>
</root>

... Мне нужен XPath, который будет иметь значение true, так как есть хотя бы одно дерево.

Но было бы неверно, если бы XML выглядел следующим образом ...

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <tree dah="false">
        <tree dah="false">
            <tree dah="false"/>
            <tree dah="false"/>
        </tree>
        <tree dah="false">
            <tree dah="false"/>
            <tree dah="false"/>
        </tree>
    </tree>
</root>

Кроме того, узлы дерева могут быть любой глубины. В моем примере у меня есть три уровня, но они могут пойти намного глубже.

Ответы [ 2 ]

2 голосов
/ 15 сентября 2010

Использовать :

boolean(/root//tree[@dah='true'])

или

boolean((/root//tree[@dah='true'])[1])

Оба выражения эквивалентны , но второе будет более эффективным с тупым(без оптимизации) Механизмы XPath.

В результате получается true() , если в документе XML существует элемент tree с dah атрибут со значением 'true' - в противном случае получается false().

1 голос
/ 15 сентября 2010
/root//tree[@dah='true']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...