Xpath - 检查所有元素是否有子元素

时间:2016-04-11 14:44:37

标签: xslt xpath xquery

鉴于文件

<a>
    <b>
        <c/>
        <d/>
    </b>
    <b>
        <c/>
        <d/>
   </b>
</a>

是否可以编写任何布尔xpath,检查所有b节点是否包含c节点。我试过了

boolean(//a/b/c)

但这仅检查至少有一个节点包含c节点,而不是所有节点

2 个答案:

答案 0 :(得分:4)

//a/b[c]会匹配至少有一个b子元素的所有c元素。

虽然我会声称有0 b个元素没有c作为孩子:

count(//a/b[not(c)]) = 0

答案 1 :(得分:2)

将查询公式化为not(//a/b[not(c)])(而不是count(...) = 0)可确保处理器在找到第一个反例后停止,而不必计算所有这些计数器。

如果你想更明确(但也更冗长),你可以使用quantified expression

every $b in //a/b satisfies $b/c