我有一个包含如下属性和属性数据类型的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上进行了大量搜索,找到了将两个属性分开的解决方案..但找不到解决方案 有什么建议吗? 谢谢
答案 0 :(得分:1)
您可以在 XSLT 2.0 中将其与for-each-group一起使用
首先使用身份模板复制所有元素
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
比在另一个模板中处理Data
和Info
来按属性第一个字符分组。
<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>