2014-12-09 92 views
1

我有以下结构的XML文件 -XQuery更新 - 新的节点添加到组节点

<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> 

节点AB需要像

<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 ..

+0

你到目前为止尝试过什么?另外,“同时”是什么意思?在我看来,你想要将所有''元素与以下''一起组合在一起,直到出现下一个''元素。这是正确的解释吗? – dirkk 2014-12-09 12:12:38

+0

@dirkk - 是的正确解释 – John 2014-12-09 12:13:35

回答

2

处理这种结构的最佳方法ctures带有'翻转窗口子句'。这将很好地组织您想要的组中的数据。我会留给你找出所需的确切的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> 
+0

谢谢。它是我正在寻找的。再次感谢。 – John 2014-12-10 04:14:57