Ordinamento e raggruppamento con XSLT
Riporto un semplice esempio per poter fare il sorting e raggruppamento con i template XSL.
Esempio di xml sorgente:
<GROUP> <ITEM> <NAME>Name1</NAME> <INFO> <INFOTYPE> <ID1>001</ID1> <ID2>001</ID2> <ITEMTYPE>TYPE1</ITEMTYPE> </INFOTYPE> </INFO> </ITEM> <ITEM> <NAME>Name2</NAME> <INFO> <INFOTYPE> <ID1>002</ID1> <ID2>002</ID2> <ITEMTYPE>TYPE1</ITEMTYPE> </INFOTYPE> </INFO> </ITEM> <ITEM> <NAME>Name3</NAME> <INFO> <INFOTYPE> <ID1>003</ID1> <ID2>003</ID2> <ITEMTYPE>TYPE2</ITEMTYPE> </INFOTYPE> </INFO> </ITEM> </GROUP>
template xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <grouped> <xsl:for-each select="//ITEMTYPE[not(. = following::ITEMTYPE)]"> <xsl:sort/> <group> <title> <xsl:value-of select="."/> </title> <xsl:for-each select="//ITEM[INFO/INFOTYPE/ITEMTYPE=current()]"> <xsl:sort select="NAME"/> <name> <xsl:value-of select="NAME"/> </name> </xsl:for-each> </group> </xsl:for-each> </grouped> </xsl:template> </xsl:stylesheet>
Risultato:
<grouped> <group> <title>TYPE1</title> <name>Name1</name> <name>Name2</name> </group> <group> <title>TYPE2</title> <name>Name3</name> </group> </grouped>