By the time you are processing an Address, it's too late to sort the
addresses. When you write
<xsl:template match="EntryData/Applicant/Address">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="ZipCode"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
the apply-templates is selecting the children of the Address, and
evaluating child::ZipCode for each one: but the nodes being sorted are
Type, City, and ZipCode nodes, and none of these has a ZipCode child.
You need to sort the addresses at the point where you are processing the
Applicant.
Michael Kay
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
Jim McDowall
Sent: 04 November 2003 17:30
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Using xsl:sort to sort child elements
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
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list