XSLT重复元素

时间:2018-04-30 06:29:49

标签: xml excel xslt

在excel中导出XML Feed时,<IMAGES>重复元素的格式错误。请帮助您了解如何获得正确的输出。

错误的XML输出

<DATA>
    <CODE>1</CODE>
    <IMAGES>
        <IMAGE>1</IMAGE>
    </IMAGES>
</DATA>
<DATA>
    <CODE>1</CODE>
    <IMAGES>
        <IMAGE>2</IMAGE>
    </IMAGES>
</DATA>

更正XML输出

<DATA>
    <CODE>
        <IMAGES>
            <IMAGE>1</IMAGE>
            <IMAGE>2</IMAGE>
        </IMAGES>
    </CODE>
</DATA>

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

对于 XSLT 2.0 ,您可以使用 for-each-group

<xsl:template match="root">
    <xsl:for-each-group select="DATA" group-by="CODE">
        <DATA>
            <CODE><xsl:value-of select="CODE"/></CODE>
            <IMAGES>
                <xsl:copy-of select="current-group()//IMAGE"></xsl:copy-of>
            </IMAGES>
        </DATA>
    </xsl:for-each-group>
</xsl:template>

对于 XSLT 1.0 ,您可以使用 Muenchian方法

<xsl:key name="datakey" match="DATA" use="CODE"/>
<xsl:template match="root">
    <xsl:for-each select="DATA[generate-id(.) = generate-id(key('datakey', CODE))]">
        <DATA>
            <CODE><xsl:value-of select="CODE"/></CODE>
            <IMAGES>
                <xsl:for-each select="//IMAGES[../CODE = current()/CODE]">
                <xsl:copy-of select="IMAGE"></xsl:copy-of>
                </xsl:for-each>
            </IMAGES>
        </DATA>
    </xsl:for-each>
</xsl:template>

这两个脚本都转换为输出

<DATA>
   <CODE>1</CODE>
   <IMAGES>
      <IMAGE>1</IMAGE>
      <IMAGE>2</IMAGE>
   </IMAGES>
</DATA>