2012-07-29 33 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