Xpath - 检查所有元素都有子元素

Xpath - check all elements have sub elements

给定文档

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

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

boolean(//a/b/c)

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

//a/b[c] 将匹配具有至少一个 c child 元素的所有 b 元素。

尽管我断言有 0 个 b 元素没有 c 作为 child:

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

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

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

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