我在组合XML元素时遇到了问题。以下xml具有重复值(T804),如何使用XSLT将它们组合到记录中的一个T804记录中。
在:
<OBR>
<OBR_31_Lab_Ins_Typ_Id>IL</OBR_31_Lab_Ins_Typ_Id>
<OBX>
<OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No></OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx>HIGH</OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx></OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx>
</OBX>
<OBX>
<OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>1.038</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx></OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx>
</OBX>
<OBX>
<OBX_3_Ltt_Cd>T086</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>0-9</OBX_7_Lbr_Rng_Tx>
</OBX>
<OBX>
<OBX_3_Ltt_Cd>T087</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>0-4</OBX_7_Lbr_Rng_Tx>
</OBX>
</ORB>
之后 - 将两个T084记录合并为一个。
<OBR>
<OBR_31_Lab_Ins_Typ_Id>IL</OBR_31_Lab_Ins_Typ_Id>
<OBX>
<OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>1.038</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx>HIGH</OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx></OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx>
<OBX>
<OBX_3_Ltt_Cd>T086</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>0-9</OBX_7_Lbr_Rng_Tx>
</OBX>
<OBX>
<OBX_3_Ltt_Cd>T087</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>0-4</OBX_7_Lbr_Rng_Tx>
</OBX>
</ORB>
答案 0 :(得分:2)
此转化:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kOrderByCd" match="OBX"
use="OBX_3_Ltt_Cd"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"OBX[generate-id()
=
generate-id(key('kOrderByCd', OBX_3_Ltt_Cd)[1])
and
key('kOrderByCd', OBX_3_Ltt_Cd)[2]
]">
<OBX>
<xsl:apply-templates mode="inGroup"/>
</OBX>
</xsl:template>
<xsl:template match=
"OBX[not(generate-id()
=
generate-id(key('kOrderByCd', OBX_3_Ltt_Cd)[1])
)
]"/>
<xsl:template match="OBX/*" mode="inGroup">
<xsl:variable name="vNonEmpty" select=
"key('kOrderByCd', ../OBX_3_Ltt_Cd)
/*[name() = name(current())
and
text()
]"/>
<xsl:apply-templates select=
"$vNonEmpty[1]| self::*[not($vNonEmpty)]"/>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<OBR>
<OBR_31_Lab_Ins_Typ_Id>IL</OBR_31_Lab_Ins_Typ_Id>
<OBX>
<OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No></OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx>HIGH</OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx></OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx>
</OBX>
<OBX>
<OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>1.038</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx></OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx>
</OBX>
<OBX>
<OBX_3_Ltt_Cd>T086</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>0-9</OBX_7_Lbr_Rng_Tx>
</OBX>
<OBX>
<OBX_3_Ltt_Cd>T087</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>0-4</OBX_7_Lbr_Rng_Tx>
</OBX>
</OBR>
会产生想要的正确结果:
<OBR>
<OBR_31_Lab_Ins_Typ_Id>IL</OBR_31_Lab_Ins_Typ_Id>
<OBX>
<OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>1.038</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx>HIGH</OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx/>
<OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx>
</OBX>
<OBX>
<OBX_3_Ltt_Cd>T086</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx/>
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>0-9</OBX_7_Lbr_Rng_Tx>
</OBX>
<OBX>
<OBX_3_Ltt_Cd>T087</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx/>
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx>
<OBX_7_Lbr_Rng_Tx>0-4</OBX_7_Lbr_Rng_Tx>
</OBX>
</OBR>
<强>解释强>:
Muenchian分组。
使用和覆盖身份规则。
使用密钥。