例如:
<a>
<b>
<c1>c1 text</b1>
<c2 c2attr="10">c2 text</b2>
<c3>c3 text</b3>
</b>
<b>
<c1>c1 text</b1>
<c2 c2attr="5">c2 text</b2>
<c3>c3 text</b3>
</b>
</a>
我想选择<b>
元素,其中<c2>
子元素具有最大c2attr
属性;在该示例中,第一个(10> 5)。
我试过了
/a/b[not(c2@c2attr <= preceding-sibling::c2@c2attr) and not(c2@c2attr <=following-sibling::c2@c2attr)]
但PHP说它无效......
答案 0 :(得分:2)
您在@
标志前缺少斜杠,您需要查找名为preceding-sibling
的{{1}}元素,而不是b
:
c2
然而,这种检查在/a/b[not(c2/@c2attr <= preceding-sibling::b/c2/@c2attr) and not(c2/@c2attr <=following-sibling::b/c2/@c2attr)]
元素的数量上将是二次的,因为它将每个b
与其他b
进行比较。简单地提取所有b
元素然后使用PHP代码迭代它们(一次)会更有效,跟踪到目前为止看到的最高b
值以及{{1}属于的。这将是线性的而不是二次的。