查找所有子元素都具有给定值的元素

时间:2010-06-14 23:32:57

标签: php xml xpath

例如,我有这个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查询才有可能吗?

感谢

2 个答案:

答案 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/>,则两个表达式都为真,您必须为此添加另一个谓词。