XSLT `xsl:sort` Element: Sorting XML Data for Enhanced Output Presentation

Learn how to sort XML data in your XSLT transformations using the `xsl:sort` element. This tutorial explains its attributes (`select`, `order`, `data-type`, `lang`, `case-order`), demonstrating how to sort nodes based on various criteria (element values, attributes) and control sorting order (ascending, descending) for creating well-organized and readable output.



Using the XSLT `xsl:sort` Element for Sorting XML Output

Introduction

In XSLT (Extensible Stylesheet Language Transformations), the `xsl:sort` element is used to sort the nodes selected by an XSLT template. This allows you to present your XML data in a specific order in the transformed output.

`xsl:sort` Element Parameters

The `xsl:sort` element has several attributes that control the sorting process. These attributes are added within the `xsl:for-each` element or other similar elements.

Index Attribute Description
1 select Specifies the node or expression to use as the sorting key.
2 lang Specifies the language to use for sorting strings (affects collation).
3 data-type Specifies the data type of the sorting key (e.g., `text`, `number`).
4 order Specifies the sort order (`ascending` or `descending`). Defaults to `ascending`.
5 case-order Specifies the case-sensitivity for string sorting (e.g., `upper-first`, `lower-first`, `upper-first`). Defaults to `upper-first`.

Example: Sorting Employee Data by Last Name

Let's say you have an XML file (Employee.xml) containing employee data, and you want to sort this data by the employee's last name using an XSLT stylesheet (Employee.xsl).

Employee.xml (Sample XML Data)

<Employees>
  <Employee id="1">
    <FirstName>Aryan</FirstName>
    <LastName>Gupta</LastName>
    <NickName>Raju</NickName>
    <Salary>30000</Salary>
  </Employee>
  <Employee id="2">
    <FirstName>Sara</FirstName>
    <LastName>Khan</LastName>
    <NickName>Zoya</NickName>
    <Salary>25000</Salary>
  </Employee>
  <Employee id="3">
    <FirstName>Peter</FirstName>
    <LastName>Symon</LastName>
    <NickName>John</NickName>
    <Salary>10000</Salary>
  </Employee>
</Employees>
Employee.xsl (XSLT Stylesheet)

<?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>
        <th>ID</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Nick Name</th>
        <th>Salary</th>
      </tr>
      <xsl:for-each select="Employees/Employee">
        <xsl:sort select="LastName" /> <!-- Sorting by Last Name -->
        <tr>
          <td><xsl:value-of select="@id"/></td>
          <td><xsl:value-of select="FirstName"/></td>
          <td><xsl:value-of select="LastName"/></td>
          <td><xsl:value-of select="NickName"/></td>
          <td><xsl:value-of select="Salary"/></td>
        </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>
Example Output

<table border="1">
  <tr>
    <th>ID</th>
    <th>First Name</th>
    <th>Last Name</th>
    <th>Nick Name</th>
    <th>Salary</th>
  </tr>
  <tr>
    <td>2</td>
    <td>Sara</td>
    <td>Khan</td>
    <td>Zoya</td>
    <td>25000</td>
  </tr>
  <tr>
    <td>1</td>
    <td>Aryan</td>
    <td>Gupta</td>
    <td>Raju</td>
    <td>30000</td>
  </tr>
  <tr>
    <td>3</td>
    <td>Peter</td>
    <td>Symon</td>
    <td>John</td>
    <td>10000</td>
  </tr>
</table>
        

Conclusion

The `xsl:sort` element is a fundamental part of XSLT for controlling the order of elements in the transformed output. Understanding its attributes allows you to create well-structured and easily readable XML transformations.