[xsl] Using xsl:sort to sort child elements

Subject: [xsl] Using xsl:sort to sort child elements
From: "Jim McDowall" <Jim.Mcdowall@xxxxxxxxxxxxxxx>
Date: Tue, 04 Nov 2003 11:29:36 -0600
I have examined the numerous examples of the xsl:sort instruction but 
haven't seen one that describes the technique to use for what I need to 
do.  

I need to sort child elements of the document that I am transforming.
Here is a very very simple example of what I'm trying to accomplish.  
Given this document: 

<EntryData>
	<Applicant>
		<FirstName>Ralph</FirstName>
		<LastName>Smith</LastName>
		<Address>
			<Type>Business</Type>
			<City>Chicago</City>
			<ZipCode>60011</ZipCode>
		</Address>
		<Address>
			<Type>Regional</Type>
			<City>Springfield</City>
			<ZipCode>62103</ZipCode>
		</Address>
		<Address>
			<Type>Corporate</Type>
			<City>New York</City>
			<ZipCode>10011</ZipCode>
		</Address>
	</Applicant>
</EntryData>

I would like to transform this document sorting the "Address" elements 
within the document by zip code.

Here's an example of a style sheet that I've tried but the result tree 
remains in it's original state... 

<?xml version="1.0"?>
<!--XML Declaration -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
version="1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema";> 
<xsl:output method="xml" indent="yes" standalone="yes"
omit-xml-declaration="no" encoding="UTF-8"/> 

<xsl:template match="EntryData/Applicant/Address">
  <xsl:copy>
    <xsl:apply-templates> 
     <xsl:sort select="ZipCode"/>
   </xsl:apply-templates> 
  </xsl:copy>
</xsl:template>

<xsl:template match="*|@*|text()">
 <xsl:copy>
   <xsl:apply-templates select="*|@*|text()">
   </xsl:apply-templates>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Please advise.  

Thanks,
Jim McDowall


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread