我正在尝试编写一个 XSLT,它将根据 SG9 字段 A_51 对所有相关 SG9 段进行分组,其中 A_50 = KAR(xpath:输入 xml 中的 INVR/SG9/SG11/SG14/FFR/C506[A_50='KAR']/A_51),对每个组进行分组后,我们需要<TNU>
在最后添加段,我的 xslt 未提供准确结果,请检查一次
输入样本
<?xml version="1.0" encoding="UTF-8"?>
<INVR>
<HNU_S>
<FIELD1>0002</FIELD1>
</HNU_S>
<MGB_S>
<FIELD1>2410458</FIELD1>
</MGB_S>
<GS2>
<NODE>
<FIELD2>SU</FIELD2>
</NODE>
</GS2>
<SG9>
<NIL_S>
<FIELD1>4141</FIELD1>
</NIL_S>
<SG11>
<SG14>
<FFR>
<C506>
<A_50>KAR</A_50>
<A_51>1234</A_51>
</C506>
</FFR>
</SG14>
</SG11>
</SG9>
<SG9>
<NIL_S>
<FIELD1>43636</FIELD1>
</NIL_S>
<SG11>
<SG14>
<FFR>
<C506>
<A_50>KAR</A_50>
<A_51>4567</A_51>
</C506>
</FFR>
</SG14>
</SG11>
</SG9>
<SG9>
<NIL_S>
<FIELD1>65757</FIELD1>
</NIL_S>
<SG11>
<SG14>
<FFR>
<C506>
<A_50>KKR</A_50>
<A_51>1234</A_51>
</C506>
</FFR>
</SG14>
</SG11>
</SG9>
<SG9>
<NIL_S>
<FIELD1>14145</FIELD1>
</NIL_S>
<SG11>
<SG14>
<FFR>
<C506>
<A_50>KKR</A_50>
<A_51>4567</A_51>
</C506>
</FFR>
</SG14>
</SG11>
</SG9>
<TNU>
<FIELD1>330</FIELD1>
</TNU>
</INVR>
输出样本
<?xml version="1.0" encoding="UTF-8"?>
<INVR>
<HNU_S>
<FIELD1>0002</FIELD1>
</HNU_S>
<MGB_S>
<FIELD1>2410458</FIELD1>
</MGB_S>
<GS2>
<NODE>
<FIELD2>SU</FIELD2>
</NODE>
</GS2>
<group>
<SG9>
<NIL_S>
<FIELD1>4141</FIELD1>
</NIL_S>
<SG11>
<SG14>
<FFR>
<C506>
<A_50>KAR</A_50>
<A_51>1234</A_51>
</C506>
</FFR>
</SG14>
</SG11>
</SG9>
<SG9>
<NIL_S>
<FIELD1>65757</FIELD1>
</NIL_S>
<SG11>
<SG14>
<FFR>
<C506>
<A_50>KKR</A_50>
<A_51>1234</A_51>
</C506>
</FFR>
</SG14>
</SG11>
</SG9>
<TNU>
<FIELD1>330</FIELD1>
</TNU>
</group>
<group>
<SG9>
<NIL_S>
<FIELD1>43636</FIELD1>
</NIL_S>
<SG11>
<SG14>
<FFR>
<C506>
<A_50>KAR</A_50>
<A_51>4567</A_51>
</C506>
</FFR>
</SG14>
</SG11>
</SG9>
<SG9>
<NIL_S>
<FIELD1>14145</FIELD1>
</NIL_S>
<SG11>
<SG14>
<FFR>
<C506>
<A_50>KKR</A_50>
<A_51>4567</A_51>
</C506>
</FFR>
</SG14>
</SG11>
</SG9>
<TNU>
<FIELD1>330</FIELD1>
</TNU>
</group>
</INVR>
我使用的 XSLT
<xsl:stylesheet xmlns:xsl="
http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="SG9">
<G_SG9>
<xsl:apply-templates select="*[not(self::SG9)]"/>
<xsl:for-each-group select="SG9" group-by="/INVR/SG9/SG11/SG14/FFR/C506[A_50='KAR']/A_51">
<group>
<xsl:copy-of select="current-group()"/>
</group>
</xsl:for-each-group>
</G_SG9>
</xsl:template>
</xsl:stylesheet>
如果我正确理解了您想要做什么,那么我认为您应该创建一个空模板
SG9
,然后有一个模板匹配TNU
,选择并分组元素并在每个元素末尾SG9
发出:TNU
group
输出结果如下:
我会尝试
假设您想要使用值 KAR 和 KKR 对 A_50 进行分组。