在xquery 1.0版本中的XQuery 3.0等效组

时间:2017-11-20 03:34:36

标签: xquery

我有以下代码,而我所拥有的saxon jar文件无法读取xquery 3.0。

for $item in doc("order.xml")//item
group by $d := $item/@dept
order by $d
return 
  <department totalQuantity="{sum($item/@quantity)}"
              code="{$d}"
              numItems="{count($item)}"/>

输出显示部门,totalQuantity和项目数。 它应该按代码分组,上面的代码不能编译。

我希望这是一种适用于xquery 1.0的方式

1 个答案:

答案 0 :(得分:5)

通常,XQuery 1.0相当于XQuery 3.0&#34; group by&#34; -enhanced FLWOR表达式依赖于fn:distinct-values()函数来查找用于将项目分组在一起的不同键。找到密钥后,您可以使用XQuery 1.0 FLWOR表达式简单地遍历密钥,并选择具有匹配密钥的项目。这是您的查询的XQuery 1.0等价物:

let $items := doc("order.xml")//item
let $depts := distinct-values($items/@dept)
for $dept in $depts
let $dept-items := $items[@dept eq $dept]
order by $dept
return
    <department totalQuantity="{sum($dept-items/@quantity)}"
                code="{$dept}"
                numItems="{count($dept-items)}"/>