例如,我有这个xml
<elements>
<a>
<b>6</b>
<b>5</b>
<b>6</b>
</a>
<a>
<b>5</b>
<b>5</b>
<b>6</b>
</a>
<a>
<b>5</b>
<b>5</b>
<b>5</b>
<b>5</b>
</a>
</elements>
我需要一个xpath查询,它必须返回我的父标记,只有当它的所有子项都等于5时(在这种情况下为[3])。 像这样的东西
//b[text()="5"]/..
但检查所有孩子的标签。请注意,子节点标签的数量可能因节点而异。
只有xpath查询才有可能吗?
感谢
答案 0 :(得分:4)
/elements/a[count(b) = count(b[.="5"])]
答案 1 :(得分:2)
不是寻找所有<b/>
等于5的元素,而是可以查找没有任何<b/>
不等于5的元素。它在语义上是相同的,但它更高效,因为你不要不必考虑所有的孩子,如果他们中的任何一个不是“5”,XPath引擎可以提前保释而不评估其余的。
换句话说,“所有b都是5”与“没有b不是5”相同。
/elements/a[not(b != "5")]
请注意,如果根本没有<b/>
,则两个表达式都为真,您必须为此添加另一个谓词。