Which is the best way to group Elements based on attribute value using XSLT? Would it be better to use XSLT 2.0 or higher?
Many thank in advance for your help
Th
In XSLT 2.0, you can use xsl:for-each-group
, but if you are going to do <xsl:for-each-group select="record" group-by="@type">
then you must be positioned on the transaction
record at that point.
Additionally, you will need to make use of current-group
to get all the record
elements within the group.
Try this XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="transaction">
<xsl:copy>
<xsl:for-each-group select="record" group-by="@type">
<records type="{current-grouping-key()}" >
<xsl:apply-templates select="current-group()" />
</records>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>