sort by different level of node
File: Data.xml <winelist> <wine grape="Chardonnay"> <winery>shop 1</winery> <product>product 1</product> <year>1998</year> <prices> <list>6.99</list> <discounted>5.99</discounted> <case>71.50</case> </prices> </wine> <wine grape="Chardonnay"> <winery>shop 2</winery> <product>product 2</product> <year>1997</year> <prices> <list>10.99</list> <discounted>9.50</discounted> <case>114.00</case> </prices> </wine> <wine grape="Cabernet"> <winery>shop 1</winery> <product>product 1</product> <year>1996</year> <prices> <list>13.99</list> <discounted>11.99</discounted> <case>143.50</case> </prices> </wine> </winelist> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="winelist"> <xsl:copy> <xsl:apply-templates> <xsl:sort data-type="number" select="prices/discounted" /> </xsl:apply-templates> </xsl:copy> </xsl:template> <xsl:template match="*"> <xsl:copy> <xsl:apply-templates /> </xsl:copy> </xsl:template> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?><winelist> <wine> <winery>shop 1</winery> <product>product 1</product> <year>1998</year> <prices> <list>6.99</list> <discounted>5.99</discounted> <case>71.50</case> </prices> </wine><wine> <winery>shop 2</winery> <product>product 2</product> <year>1997</year> <prices> <list>10.99</list> <discounted>9.50</discounted> <case>114.00</case> </prices> </wine><wine> <winery>shop 1</winery> <product>product 1</product> <year>1996</year> <prices> <list>13.99</list> <discounted>11.99</discounted> <case>143.50</case> </prices> </wine></winelist>