1

次のエントリを含む XML ファイルがあります。

<file>
 <unit id="u-1.01"/>
 <unit id="u-1.02"/>
 <unit id="u-1.03"/>
 <unit id="u-1.04"/>
 <unit id="u-1.05"/>
 <unit id="u-1.06"/>
 <unit id="u-1.07"/>
 <unit id="u-2.01"/>
 <unit id="u-2.02"/>
 <unit id="u-2.03"/>
 <unit id="u-2.04"/>
 <unit id="u-2.05"/>
 <unit id="u-2.06"/>
</file>

substring 関数を使用してid属性の 3 番目の文字を選択し、それを変数idに割り当てるとします。

    for $identifiers in file/unit/@id
    let $id := substring($identifiers, 3, 1)
    return ($id)

以下を返します。

1 1 1 1 1 1 1 2 2 2 2 2 2

必要なのは、各一意の値のカウントです。この場合、「1」の場合は 7、「2」の場合は 6 です。どうすればこれを達成できますか?

4

2 に答える 2

1

XQueryプロセッサがサポートしていない場合はgroup by、すべての一意のIDを取得し、自分で数えます。

let $ids := file/unit/@id/substring(., 3, 1)
return
  for $uniqueID in distinct-values($ids)
  return element { "count" } {
    attribute { "id" } { $uniqueID },
      count($ids[.=$uniqueID])
    }
于 2012-11-26T18:16:45.513 に答える