首页 > 解决方案 > 如何在 Xquery 结果中包含 position() 的值?

问题描述

如果不使用翻转窗口,位置本身如何包含在结果中?

显然“$p”应该是$items 中每个$item 的“索引”。话虽如此,迭代根本不能保证是连续的。

输出:

<result>
  <items>
    <item pos="$p">5</item>
    <item pos="$p">3</item>
    <item pos="$p">7</item>
    <item pos="$p">2</item>
    <item pos="$p">7</item>
    <item pos="$p">3</item>
  </items>
</result>

询问:

xquery version "3.1";

let $items := (5,3,7,2,7,3)
return
   <result>   
      <items>
      {
         for $item in $items[position()]
     let $p := position()
         return <item pos="$p">{$item}</item>
      }
      </items>
   </result>

查询改编自:

https://www.tutorialspoint.com/xquery/xquery_position.htm

标签: xmlxpathxquerybasexflwor

解决方案


您谈到使用翻滚窗口,但您的查询不使用翻滚窗口。

但是它确实使用了 FLWOR 表达式,并且 FLWOR 表达式不设置焦点,这意味着它们不设置 position() 的值。

对于你的例子,我认为你想要

for $item at $p in $items return <item pos="{$p}">{$item}</item>

或更简单地说

$items ! <item pos="{position()}">{.}</item>

使用翻滚窗口,您可以通过在结果中写入start at $s end at $e然后输出将变量绑定到窗口的开始和结束位置。$s$e


推荐阅读