xsl-list
[Top] [All Lists]

RE: Using xsl:sort to sort child elements

2003-11-04 12:27:46
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



<Prev in Thread] Current Thread [Next in Thread>