我有以下代码,而我所拥有的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的方式
答案 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)}"/>