需要一个XPath来检查任何子孙,孙子孙等的属性值

时间:2010-09-14 23:12:47

标签: xml xslt xpath

所以给这个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>

...我需要一个评估为true的XPath,因为至少有一棵树/ @ dah ='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 个答案:

答案 0 :(得分:2)

使用

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

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

两个表达式都是等价的,但第二个表达式对于哑(非优化)XPath引擎会更有效。

结果 true() 如果XML文档中存在 tree 元素 {{ 1}} 带值的属性'true' - 否则结果为dah

答案 1 :(得分:1)

/root//tree[@dah='true']