Sort first then output to table
File: Data.xml
<?xml version="1.0" ?>
<customer-list>
<customer>
<name>
<first>A</first>
<last>B</last>
</name>
<order>order 1</order>
<order>order 2</order>
</customer>
<customer>
<name>
<first>C</first>
<last>D</last>
</name>
<order>order 3</order>
<order>order 4</order>
</customer>
</customer-list>
File: Transform.xslt
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<HTML>
<HEAD><TITLE>Customers</TITLE></HEAD>
<BODY>
<TABLE BORDER="1">
<xsl:apply-templates select="customer-list/customer">
<xsl:sort select="name/last"/>
<xsl:sort select="name/first"/>
</xsl:apply-templates>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="customer">
<TR>
<TH ALIGN="left">
<xsl:value-of select="name/last"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="name/first"/>
</TH>
</TR>
<xsl:apply-templates select="order"/>
</xsl:template>
<xsl:template match="order">
<TR>
<TD>
<xsl:apply-templates/>
</TD>
</TR>
</xsl:template>
</xsl:stylesheet>
Output:
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Customers</TITLE>
</HEAD>
<BODY>
<TABLE BORDER="1">
<TR>
<TH ALIGN="left">D, C</TH>
</TR>
<TR>
<TD>order 3</TD>
</TR>
<TR>
<TD>order 4</TD>
</TR>
<TR>
<TH ALIGN="left">B, A</TH>
</TR>
<TR>
<TD>order 1</TD>
</TR>
<TR>
<TD>order 2</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Related examples in the same category