2

XPath または XQuery を使用して、別のノードの出現回数が最も多いノードを選択するにはどうすればよいですか?

たとえば、卵が最も多いバスケットを見つけるにはどうすればよいですか?

<basket name="1">
        <egg></egg>
        <egg></egg>
</basket>
<basket name="2">
        <egg></egg>
</basket>
<basket name="3">
        <egg></egg>
        <egg></egg>
        <egg></egg>
        <egg></egg>
</basket>
4

3 に答える 3

3

これは 1 つの解決策 (TIMTOWTDI) です。

let $nodes := <xml>
  <basket name="1">
          <egg></egg>
          <egg></egg>
  </basket>
  <basket name="2">
          <egg></egg>
  </basket>
  <basket name="3">
          <egg></egg>
          <egg></egg>
          <egg></egg>
          <egg></egg>
  </basket>
</xml>
let $max := max(for $c in $nodes//basket return count($c/egg))
return $nodes/basket[count(egg) = $max]
于 2012-12-02T20:11:37.683 に答える
0
<xml>
    <basket name="1">
        <egg></egg>
        <egg></egg>
    </basket>
    <basket name="2">
        <egg></egg>
    </basket>
    <basket name="3">
        <egg></egg>
        <egg></egg>
        <egg></egg>
        <egg></egg>
    </basket>
</xml>

そのようにXPathを試すことができます

xml/basket[
    count(egg) > count(following-sibling::*/egg) and
    count(egg) > count(preceding-sibling::*/egg)
]

または、卵の要素だけでなくカウントしたい場合

xml/basket[
    count(child::*) > count(following-sibling::*/child::*) and
    count(child::*) > count(preceding-sibling::*/child::*)
]
于 2012-12-02T20:26:38.583 に答える