我有一个这样的输入文件
<items>
<item>
<id>5</id>
<name>Harry</name>
<age>18</age>
<color>blue</color>
</item>
<item>
<id>5</id>
<name>Harry</name>
<age>18</age>
<fav_food>pizza</fav_food>
</item>
<item>
<id>5</id>
<name>Harry</name>
<age>18</age>
<is_single>true</is_single>
</item>
</items>
我想对元素进行分组,使文件看起来像这样
<items>
<item>
<id>5</id>
<name>Harry</name>
<age>18</age>
<color>blue</color>
<fav_food>pizza</fav_food>
<is_single>true</is_single>
</item>
</items>
编辑 - 在此链接之后进行了 XSLT 转换(当 ID 相同时 XSLT 合并数据),但这只是不打印任何内容。
这是我的转换(使用 XSLT 2.0) -
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="items">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="item">
<xsl:apply-templates select="@*" />
<xsl:for-each-group select="item" group-by="id">
<item>
<id><xsl:value-of select="current-grouping-key()"/></id>
<xsl:apply-templates select="current-group()" />
</item>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="@*|node()[not(self::*)]">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>