File: Data.xml <?xml version="1.0" encoding="utf-8"?> <data> <AAA> <BBB> <CCC>A</CCC> </BBB> <BBB/> <BBB/> </AAA> <AAA> <BBB/> <BBB> <CCC>B</CCC> <CCC>C</CCC> <CCC>D</CCC> <CCC>E</CCC> </BBB> </AAA> </data> File: Transform.xslt <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <TABLE border="1"> <TR> <td>Position</TH> <td>Last</TH> <td>Name</TH> </TR> <xsl:for-each select="//AAA[last()]//CCC"> <TR> <TD> <xsl:value-of select="position()"/> </TD> <TD> <xsl:value-of select="last()"/> </TD> <TD> <xsl:value-of select="text()"/> </TD> </TR> </xsl:for-each> </TABLE> <TABLE border="1"> <TR> <td>Position</TH> <td>Last</TH> <td>Name</TH> </TR> <xsl:for-each select="//AAA[last()]//CCC"> <xsl:sort order="ascending" select="text()"/> <TR> <TD> <xsl:value-of select="position()"/> </TD> <TD> <xsl:value-of select="last()"/> </TD> <TD> <xsl:value-of select="text()"/> </TD> </TR> </xsl:for-each> </TABLE> </xsl:template> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?><TABLE border="1"><TR><td>Position</TH><td>Last</TH><td>Name</TH></TR><TR><TD>1</TD><TD>4</TD><TD>B</TD></TR><TR><TD>2</TD><TD>4</TD><TD>C</TD></TR><TR><TD>3</TD><TD>4</TD><TD>D</TD></TR><TR><TD>4</TD><TD>4</TD><TD>E</TD></TR></TABLE><TABLE border="1"><TR><td>Position</TH><td>Last</TH><td>Name</TH></TR><TR><TD>1</TD><TD>4</TD><TD>E</TD></TR><TR><TD>2</TD><TD>4</TD><TD>C</TD></TR><TR><TD>3</TD><TD>4</TD><TD>B</TD></TR><TR><TD>4</TD><TD>4</TD><TD>D</TD></TR></TABLE>