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