リレーショナルデータベースからXMLとしてデータを抽出する必要があり、抽出する各レコードに番号を割り当てる必要があります。私は次のXQueryを書きました...
<myRecords> {
let $i := 0
for $Territories in collection("Northwind.dbo.Territories")/Territories
let $i := $i + 1
return
<territory rec_count="{$i}">
{$Territories/TerritoryDescription/text()}
</territory>
} </myRecords>
...期待した結果が得られません:
<myRecords>
<territory rec_count="1">Westboro</territory>
<territory rec_count="1">Bedford</territory>
<territory rec_count="1">Georgetown</territory>
…
レコード番号はインクリメントされません。なんで?
XQueryは副作用のない関数型言語です。たとえば、JavaやC#のように、XQueryで状態の概念を実際に作成することはできません。場合によっては、再帰関数を使用して状態をシミュレートできますが、この問題を解決するには、はるかに簡単な解決策があります。位置変数を使用できます。XQueryは次のとおりです。
<myRecords> {
for $Territories at $i in collection("Northwind.dbo.Territories")/Territories
return
<territory rec_count="{$i}">
{$Territories/TerritoryDescription/text()}
</territory>
} </myRecords>
そして、これが(期待される)結果です:
<myRecords>
<territory rec_count="1">Westboro</territory>
<territory rec_count="2">Bedford</territory>
<territory rec_count="3">Georgetow</territory>
…