将不同的两个元素属性拆分为多个重复的行

时间:2018-09-17 03:31:22

标签: xml xslt

我有一个包含如下属性和属性数据类型的xml文件:

<document>
<ROOT>
    <Data X="1233" XType="Integer"  Z="abcd" ZType="String" />
    <Info T="1:30:57" TType="Date" F="xyz" FType="String" />
</ROOT>
</document>

,预期输出为:

<document>
<ROOT>
    <Data X="1233" XType="Integer"  />
    <Data Z="abcd" ZType="String" />
    <Info T="1:30:57" TType="Date"/>
    <Info F="xyz" FType="String" />
</ROOT>
</document>

我在Google上进行了大量搜索,找到了将两个属性分开的解决方案..但找不到解决方案 有什么建议吗? 谢谢

1 个答案:

答案 0 :(得分:1)

您可以在 XSLT 2.0 中将其与for-each-group一起使用

首先使用身份模板复制所有元素

  <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*"/>
        </xsl:copy>
    </xsl:template>

比在另一个模板中处理DataInfo来按属性第一个字符分组。

<xsl:template match="Data|Info">
    <xsl:variable name="currentelement" select="local-name(.)"/>
    <xsl:for-each-group select="@*" group-by="upper-case(substring(local-name(.), 1,1))">
     <xsl:element name="{$currentelement}">
         <xsl:copy-of select="current-group()"></xsl:copy-of>
     </xsl:element>   
    </xsl:for-each-group>
</xsl:template>

您可以在https://xsltfiddle.liberty-development.net/3NzcBtF看到转化