XSLT to sort nodes by name? XSLT to sort nodes by name? xml xml

XSLT to sort nodes by name?


This transformation:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="node()|@*">  <xsl:copy>   <xsl:apply-templates select="@*">    <xsl:sort select="name()"/>   </xsl:apply-templates>   <xsl:apply-templates select="node()">    <xsl:sort select="name()"/>   </xsl:apply-templates>  </xsl:copy> </xsl:template></xsl:stylesheet>

when applied on this XML document:

<t b="x" c="y" a="t">  <c/>  <b/>  <a/></t>

produces the wanted sorted output:

<t a="t" b="x" c="y">    <a></a>    <b></b>    <c></c></t>

Do note:

  1. Not only the elements but also the attributes are sorted (the latter is implementation dependent, but works OK with MSXML).

  2. Using sorted XML for diffs is unreliable, because converting an XML document to a sorted representation isn't 1:1 mapping.