Sort by different data types and order : Sort « XSLT stylesheet « XML Tutorial






File: Data.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="Transform.xslt"?>

<BOOK>
   <TITLE>Java</TITLE>
   <AUTHOR>
      <FIRSTNAME>Jack</FIRSTNAME>
      <LASTNAME>Smith</LASTNAME>
   </AUTHOR>
   <BINDING>hardcover</BINDING>
   <PAGES>724</PAGES>
   <PRICE>$9.95</PRICE>
</BOOK>

File: Transform.xslt

<?xml version="1.0"?>
<xsl:stylesheet
   version="1.0" 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:template match="/">
      <HTML>
      <HEAD>
         <TITLE>Book Inventory</TITLE>
      </HEAD>
      <BODY>
      <H2>Book Inventory</H2>
      <H3>Trade Paperback Books</H3>
      <xsl:apply-templates 
         select="INVENTORY/BOOK[BINDING='trade paperback']">
         <xsl:sort 
            select="AUTHOR/LASTNAME" 
            data-type="text"
            order="ascending"/>
         <xsl:sort 
            select="AUTHOR/FIRSTNAME" 
            data-type="text"
            order="ascending"/>
         <xsl:sort
            select="PAGES" 
            data-type="number"
            order="descending"/>
      </xsl:apply-templates>
      </BODY>
      </HTML>
   </xsl:template>

   <xsl:template match="BOOK">
      <SPAN STYLE="font-style:italic">Author: </SPAN>
      <xsl:value-of select="AUTHOR"/><BR/>
      <SPAN STYLE="font-style:italic">Title: </SPAN>
      <xsl:value-of select="TITLE"/><BR/>
      <SPAN STYLE="font-style:italic">Binding type: </SPAN>
      <xsl:value-of select="BINDING"/><BR/>
      <SPAN STYLE="font-style:italic">Number of pages: </SPAN>
      <xsl:value-of select="PAGES"/><BR/>
      <SPAN STYLE="font-style:italic">Price: </SPAN>
      <xsl:value-of select="PRICE"/><P/>
    </xsl:template>

</xsl:stylesheet>

Output:

<HTML>
   <HEAD>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <TITLE>Book Inventory</TITLE>
   </HEAD>
   <BODY>
      <H2>Book Inventory</H2>
      <H3>Trade Paperback Books</H3>
   </BODY>
</HTML>








5.18.Sort
5.18.1.The Element is used to specify sort order for node-sets
5.18.2.sort order="descending" select="."
5.18.3.sort elements
5.18.4.sort order="descending"
5.18.5.sort data-type="number" order="descending"
5.18.6.sort by name()
5.18.7.sort by attribute: sort select="@joined" data-type="number" order="descending"
5.18.8.Sort by different data types and order
5.18.9.Sort in a for-each loop
5.18.10.Sort by last name than first name
5.18.11.sort select="." data-type="number"
5.18.12.sort select="xs:integer(.)"
5.18.13.sort select="."