使用XQuery在一个文件中合并类似的XML结构

使用XQuery在一个文件中合并类似的XML结构,xml,xquery,informatica-cloud,Xml,Xquery,Informatica Cloud,我在XML文件中有以下结构,我希望合并所有子节点,前提是它们具有相同的父节点。我也想删除重复的。我还提供了输入XML和所需输出的示例。在下面的示例中,我希望合并所有与地址相关的属性和标识符,因为两个节点的CUST_NM字段是相同的 <root> <Objects> <CUST_NUM> MC0000289917 </CUST_NUM> <FIRST_Nm> RONALD &

我在XML文件中有以下结构,我希望合并所有子节点,前提是它们具有相同的父节点。我也想删除重复的。我还提供了输入XML和所需输出的示例。在下面的示例中,我希望合并所有与地址相关的属性和标识符,因为两个节点的CUST_NM字段是相同的

<root>
<Objects>
    <CUST_NUM>
        MC0000289917
    </CUST_NUM>
    <FIRST_Nm>
        RONALD
    </FIRST_Nm>
    <Address>   
        <Addr_line_1>
            5655 HUDSON DR
        </Addr_line_1>   
        <Addr_line_2>
            STE 130
        </Addr_line_2>   
    </Address>
    <Identifier>
        <ID_TYP_CD>
            SLN
        </ID_TYP_CD>
        <ID_VAL>
            35
        </ID_VAL>
    </Identifier>
</Objects>
<Objects>
    <CUST_NUM>
        MC0000289917
    </CUST_NUM>
    <FIRST_Nm>
        RONALD
    </FIRST_Nm>
    <Address>   
        <Addr_line_1>
            568 HUDSON DR1
        </Addr_line_1>   
        <Addr_line_2>
            STE 132
        </Addr_line_2>   
    </Address>
    <Identifier>
        <ID_TYP_CD>
           SLN
    </ID_TYP_CD>
    <ID_VAL>
        35
    </ID_VAL>
</Identifier>

MC0000289917
罗纳德
5655哈德逊博士
STE 130
SLN
35
MC0000289917
罗纳德
568哈德逊DR1
STE 132
SLN
35

期望输出:

<root>
<Objects>
    <CUST_NUM>
        MC0000289917
    </CUST_NUM>
    <FIRST_Nm>
        RONALD
    </FIRST_Nm>
    <Address>   
        <Addr_line_1>
            5655 HUDSON DR
            568 HUDSON DR1
        </Addr_line_1>   
        <Addr_line_2>
            STE 130
            STE 132
        </Addr_line_2>   
    </Address>
    <Identifier>
        <ID_TYP_CD>
            SLN
        </ID_TYP_CD>
        <ID_VAL>
            35
        </ID_VAL>
    </Identifier>
</Objects>

MC0000289917
罗纳德
5655哈德逊博士
568哈德逊DR1
STE 130
STE 132
SLN
35

重复使用
分组方式似乎是一项任务:

/* ! element { node-name() } {
    for $obj in Objects
    group by $cust-no := $obj/CUST_NUM
    return
        <OBJECTS>
        {
            for $child at $pos in $obj/*
            group by $name := node-name($child)
            order by head($pos)
            return 
                element { $name } { 
                    if ($child/*)
                    then for $grand-child at $gpos in $child/*
                         group by $gc-name := node-name($grand-child)
                         order by head($gpos)
                         return 
                             element { $gc-name } { distinct-values($grand-child ! normalize-space(data())) }
                    else distinct-values($child/data()) 
                }
        }
        </OBJECTS>
}
/*!元素{node-name()}{
对象中的$obj
按$cust编号分组:=$obj/cust\u NUM
返回
{
对于$obj中$pos处的$child/*
按$name分组:=节点名($child)
总订单($pos)
返回
元素{$name}{
如果($child/*)
然后在$child中以$GPO的$grand child/*
按$gc名称分组:=节点名称($grand child)
总订单($GPO)
返回
元素{$gc name}{不同的值($grand child!规范化空间(data())}
else不同值($child/data())
}
}
}

您的上下文和XQuery引擎是什么?我想对所有子节点进行分组,如果它们具有相同的父节点,如上例所示。我正试图在Informatica on cloud中实现这一点,它提供了编写XQuery的功能。它支持所有XQuery1.0构造和少数XQuery3.0构造,例如1-Try-catch2-groupby