我想遍歷xquery中的一個序列並一次獲取2個元素。什麼是最簡單的方法來做到這一點?如何迭代xquery中的序列?
1
A
回答
1
一種選擇是迭代所有項目,只是在項目到達除數時才取項目,在這種情況下爲2.一個缺點是如果項目不是最後一組項目甚至是除數的倍數。例如,具有奇數個元素的序列的最後一個元素將不會以此方法返回。
for $item at $index in $items
return
if ($item mod 2 = 0) then
($items[$index - 1], $items[$index])
else
()
另一種選擇是使用mod和項目的索引。使用這種方法,您可以確保將所有元素都包含在$ items序列中,方法是將小組中的項目數添加到計數中。
let $group-size := 2
return
for $index in (1 to fn:count($items)+($group-size - 1))[. mod $group-size = 0]
return
($items[$index - 1] , $items[$index])
0
for $item at $index in $items
return
(
if ($index mod 2 eq 0) then
(
$items[xs:integer(xs:integer($index) - 1)], $items[xs:integer($index)]
)
else
()
)
0
let $s := ("a","b","c","d","e","f")
for $i in 1 to xs:integer(count($s) div 2)
return
<pair>
{($s[$i*2 - 1],$s[$i*2])}
</pair>
回報
<pair>a b</pair>
<pair>c d</pair>
<pair>e f</pair>
2
的XQuery 3.0解決方案
對於此,更復雜的尋呼用例的Window Clause已經用XQuery 3.0中創建。但是,它還不被許多XQuery處理器支持。
窗口化例子
這裏,你可以在try.zorba執行例如工作示例:
for tumbling window $pair in (2, 4, 6, 8, 10, 12, 14)
start at $s when fn:true()
end at $e when $e - $s eq 1
return <window>{ $pair }</window>
結果
<window>2 4</window><window>6 8</window><window>10 12</window><window>14</window>
相關問題
- 1. XQuery的迭代
- 2. XQuery的迭代值
- 3. 如何構建串迭代XQuery中
- 4. 迭代通過XQuery的順序向後
- 5. 如何迭代序列?
- 6. 如何使用XQuery在SoapUI中迭代SOAP響應?
- 7. 如何迭代boost :: fusion序列?
- 8. 迭代python列表:迭代順序
- 9. 如何通過Python中的已排序迭代進行迭代
- 10. 重複序列的迭代
- 11. 如何迭代F#中的散列表?
- 12. 如何迭代Python中的defaultdict(列表)?
- 13. 如何迭代Jasper中的列表?
- 14. 如何迭代矩陣中的一列?
- 15. 迭代器中的整數序列迭代器(Java)
- 16. 如何迭代通過令牌化結果在xquery
- 17. 如何迭代JSON列表?
- 18. 如何Python列表迭代?
- 19. 如何迭代特定列?
- 20. 如何迭代列表?
- 21. 如何迭代列表?
- 22. C#如何迭代excel列
- 23. 迭代跨越線路中的序列
- 24. TypeError:在Python中的非序列迭代
- 25. xquery空序列如何處理
- 26. 如何迭代和排序
- 27. 如何排序READDIR迭代
- 28. 如何迭代模型中的集合到無序列表?
- 29. 如何爲XQuery中的序列中的某個位置賦值?
- 30. 迭代列表python程序
我喜歡它。我想我們最終可以使用它。它看起來也有不同類型的窗口。很高興知道。 – spig 2011-03-17 22:47:54