XQuery将xml元素分组
我尝试在xquery中进行分组XQuery将xml元素分组,xquery,Xquery,我尝试在xquery中进行分组 <Sheets> <Sheet> <ROI>5350</ROI> <TPI>830</TPI> </Sheet> <Sheet> <ROI>5459</ROI> <TPI>830</TPI> </Sheet>
<Sheets>
<Sheet>
<ROI>5350</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5459</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5678</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>17473</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>857</TPI>
</Sheet>
<Sheet>
<ROI>5713</ROI>
<TPI>857</TPI>
</Sheet>
</Sheets>
5350
830
5459
830
5350
856
5678
856
17473
856
5350
857
5713
857
在我的xquery中,我想传递一个动态值,比如数字4。。。我希望我的xml将4个表元素分组到一个集合中,如
<Sheets>
<set>
<Sheet>
<ROI>5350</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5459</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5678</ROI>
<TPI>856</TPI>
</Sheet>
</set>
<set>
<Sheet>
<ROI>17473</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>857</TPI>
</Sheet>
<Sheet>
<ROI>5713</ROI>
<TPI>857</TPI>
</Sheet>
</set>
</Sheets>
5350
830
5459
830
5350
856
5678
856
17473
856
5350
857
5713
857
例如,将4张图纸分成一组,将其他4张图纸分成一组,最后将其余的图纸分成一组。您可以使用
subsequence()
递归调用函数
例如
XML输入
<Sheets>
<Sheet>
<ROI>5350</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5459</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5678</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>17473</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>857</TPI>
</Sheet>
<Sheet>
<ROI>5713</ROI>
<TPI>857</TPI>
</Sheet>
</Sheets>
<Sheets>
<set>
<Sheet>
<ROI>5350</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5459</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5678</ROI>
<TPI>856</TPI>
</Sheet>
</set>
<set>
<Sheet>
<ROI>17473</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>857</TPI>
</Sheet>
<Sheet>
<ROI>5713</ROI>
<TPI>857</TPI>
</Sheet>
</set>
</Sheets>
XML输出
<Sheets>
<Sheet>
<ROI>5350</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5459</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5678</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>17473</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>857</TPI>
</Sheet>
<Sheet>
<ROI>5713</ROI>
<TPI>857</TPI>
</Sheet>
</Sheets>
<Sheets>
<set>
<Sheet>
<ROI>5350</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5459</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5678</ROI>
<TPI>856</TPI>
</Sheet>
</set>
<set>
<Sheet>
<ROI>17473</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>857</TPI>
</Sheet>
<Sheet>
<ROI>5713</ROI>
<TPI>857</TPI>
</Sheet>
</set>
</Sheets>
5350
830
5459
830
5350
856
5678
856
17473
856
5350
857
5713
857
如果您有可用的XQuery 3.0,可以使用翻滚窗口
轻松实现这一点:
xquery version "3.0";
let $group-size := 4 (: set your group size here :)
return
<Sheets>
{
for tumbling window $window in /Sheets/Sheet
start at $start when fn:true()
end at $end when $end - $start eq $group-size - 1
return
<set>{$window}</set>
}
</Sheets>
xquery版本“3.0”;
让$group size:=4(:在此处设置组大小:)
返回
{
用于翻转窗口$window in/Sheets/Sheet
fn:true()时从$start开始
在$end时结束$end-$start eq$组大小-1
返回
{$window}
}
否则,如果只有XQuery 1.0可用,则可以使用简单的FLWOR表达式和位置谓词:
xquery version "1.0";
let $group-size := 4 (: set your group size here :)
return
<Sheets>
{
for $group in (1 to round(count(/Sheets/Sheet) div $group-size) cast as xs:integer)
let $start := (1 * ($group - 1) * $group-size) + 1
let $end := $group * $group-size
return
<set>{/Sheets/Sheet[position() ge $start][position() le $end]}</set>
}
</Sheets>
xquery版本“1.0”;
让$group size:=4(:在此处设置组大小:)
返回
{
对于$group in(1到四舍五入(计数(/Sheets/Sheet)div$group size),强制转换为xs:integer)
让$start:=(1*($group-1)*$group size)+1
设$end:=$group*$group size
返回
{/Sheets/Sheet[position()ge$start][position()le$end]}
}