XPath测试,以查看所有子项的属性是否具有特定值

时间:2011-03-02 16:25:54

标签: xpath

这是一个简单的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 个答案:

答案 0 :(得分:4)

这个XPath表达式:

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

含义:至少有一个@tip属性不等于'ddd'

答案 1 :(得分:4)

如果所有Atty元素都具有值为“ddd”的属性 tip ,则此表达式仅返回true:

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

或者,如果存在没有 tip 属性的Atty元素,则以下表达式也将返回true。如果Atty元素的 tip 属性的值不是“ddd”,则它只返回false:

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

当然,路径可以更具体,而不是“ // ”where选择器。应该在XPath 1.0和2.0中工作。