1

例如:

<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>的子元素的元素;在此示例中,第一个 (10 > 5)。<c2>c2attr

我努力了

/a/b[not(c2@c2attr <= preceding-sibling::c2@c2attr) and not(c2@c2attr <=following-sibling::c2@c2attr)]

但是PHP说它是无效的......

4

1 回答 1

2

您在@符号前缺少斜杠,您需要查找preceding-sibling名为 的元素b,而不是c2

/a/b[not(c2/@c2attr <= preceding-sibling::b/c2/@c2attr) and not(c2/@c2attr <=following-sibling::b/c2/@c2attr)]

然而,这种检查在b元素数量上是二次方的,因为它是相互比较bb。简单地提取所有b元素,然后使用 PHP 代码迭代它们(一次),跟踪c2attr您迄今为止看到的最高值以及它b属于哪个,这样会更有效。这将是线性的而不是二次的。

于 2013-01-27T22:11:51.883 回答