我有一个结构如下的XML文件 -
<Root>
<Doc>
<Ref>
<A></A>
<B></B>
<A></A>
<B></B>
<B></B>
<B></B>
</Ref>
</Doc>
<Doc>
<Ref>
<A></A>
<B></B>
<B></B>
<B></B>
</Ref>
</Doc>
<Doc>
<Ref>
<A></A>
<B></B>
<B></B>
<A></A>
<B></B>
<B></B>
</Ref>
</Doc>
</Root>
节点A
和所有同时B
节点需要分组,如下所示
<Root>
<Doc>
<Ref>
<data>
<A></A>
<B></B>
</data>
<data>
<A></A>
<B></B>
<B></B>
<B></B>
</data>
</Ref>
</Doc>
<Doc>
<Ref>
<data>
<A></A>
<B></B>
<B></B>
<B></B>
</data>
</Ref>
</Doc>
<Doc>
<Ref>
<data>
<A></A>
<B></B>
<B></B>
</data>
<data>
<A></A>
<B></B>
<B></B>
</data>
</Ref>
</Doc>
</Root>
节点数B
,节点A
之后可以是任何内容,例如 2、3 ...或 10..
处理此类结构的最佳方法是使用"翻转窗口子句"。这将很好地组织所需组中的数据。我将留给您找出所需的确切 xquery-update 语法。
for $ref in //Ref
return <Ref>{
for tumbling window $w in $ref/element()
start $s when $s/self::A
return <data>{$w}</data>
}</Ref>