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-siblingbc2

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

ただし、この種のチェックは、すべてを1つおきにb比較するため、要素数が2次式になります。すべての要素を単純に抽出し、PHPコードを使用してそれらを(1回)繰り返し、これまでに見た中で最も高い値とそれに属する値を追跡する方が効率的です。これは、2次ではなく線形になります。bbbc2attrb

于 2013-01-27T22:11:51.883 に答える