2012-07-29 91 views
1

爲什麼迭代通過XQuery的順序向後

for $i in (0 to 3) 
     return element color {"red"} 

回報

<color>red</color> 
<color>red</color> 
<color>red</color> 
<color>red</color> 

,但扭轉了迭代順序

for $i in (3 to 0) 
     return element color {"red"} 

回報什麼?

回答

1

作爲每XPath 2.0 W3C Specification

甲範圍表達式可以用於構建的連續 整數序列中的每個操作數的。的運算符爲 ,就好像它是函數的參數,其參數類型爲xs:integer ?.如果其中一個操作數是空序列,或者如果從第一個操作數派生的整數大於 整數派生自第二個操作數,範圍 表達式的結果爲空序列

你可以簡單地使用這樣的

for $i in (0 to 3) 
return color[4 - $i] 
+0

公平足夠(:現在我很好奇爲什麼3到0返回一個空的範圍 – 2012-07-30 13:03:32

+0

@RosePerrone:因爲這是如何定義XPath 2.0'to'操作符:「*範圍表達式可以用來構造一個連續的序列整數,to運算符的每個操作數都被轉換爲具有期望參數類型xs:integer?的函數的參數,如果任一操作數是空序列,或者如果從第一個操作數派生的整數大於比從第二個操作數導出的整數,範圍表達式的結果是一個空序列*「。請參見:http://www.w3.org/TR/xpath20/#doc-xpath-RangeExpr – 2012-07-30 13:08:43

1

(0-3)返回x s的序列:整數0至3

...但(3比0)返回空序列! (所以它在你的第二個例子中迭代0次)

p.s. XQuery的民間稱之爲「陣列」,「序列」:P

+0

謝謝!你會如何推薦我向後迭代一個序列? – 2012-07-29 08:48:33

+0

將for循環換成reverse():reverse(for $ i in(0 to 3) return element color {「red」} )。對不起,我在我的手機上,所以格式是有點奇怪:-) – michael 2012-07-29 10:26:00

+1

你可以嘗試fn:反向在zorba沙盒在http://www.zorba-xquery.com/html/demo#6ZCO32IwRI3FjC0XOfKGICLhy2Q= – wcandillon 2012-07-29 13:36:57