【问题标题】:Iterate through XQuery sequence backward向后迭代 XQuery 序列
【发布时间】:2012-07-29 06:35:57
【问题描述】:

为什么

  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"}

什么都不返回?

【问题讨论】:

    标签: xquery


    【解决方案1】:

    根据XPath 2.0 W3C Specification

    "范围表达式可以用来构造一个序列 连续整数。 to 运算符的每个操作数是 转换为好像它是具有预期的函数的参数 参数类型 xs:integer?。如果任一操作数为空序列,或 如果从第一个操作数派生的整数大于 从第二个操作数派生的整数,范围的结果 表达式是一个空序列"

    你可以简单地使用这样的东西

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

    【讨论】:

    • 很公平(:现在我很好奇为什么 3 到 0 返回一个空范围。
    • @RosePerrone:因为这是 XPath 2.0 to 运算符的定义方式:“范围表达式可用于构造连续整数序列。to 的每个操作数运算符被转换,就好像它是具有预期参数类型 xs:integer? 的函数的参数。如果任一操作数是空序列,或者如果从第一个操作数派生的整数大于从第二个操作数派生的整数,范围表达式的结果是一个空序列”。见:w3.org/TR/xpath20/#doc-xpath-RangeExpr
    【解决方案2】:

    (0 到 3) 返回一个 xs 序列:整数 0 到 3

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

    附言xquery 人们说“数组”的“序列”:P

    【讨论】:

    • 谢谢!你会建议我如何向后迭代一个序列?
    • 将 for 循环包装在 reverse() 中: reverse( for $i in (0 to 3) return element color {"red"} ) 。对不起,我在我的手机上,所以格式有点奇怪:-)
    • 你可以在 zorba 沙盒中尝试 fn:reverse zorba-xquery.com/html/demo#6ZCO32IwRI3FjC0XOfKGICLhy2Q=
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多