xsl-list
[Top] [All Lists]

Re: sorting by maximum value of multiple nodes

2006-02-08 22:58:14
If you are using XSLT 2.0, you can do something like this (tested with
saxon b 8.6.1)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                       xmlns:xs="http://www.w3.org/2001/XMLSchema";
                       version="2.0">

<xsl:output method="text" />

<xsl:template match="/employees">
  <xsl:apply-templates select="employee">
    <xsl:sort select="max(for $x in Patent/date return xs:date($x))"
order="descending" />
  </xsl:apply-templates>
</xsl:template>

<xsl:template match="employee">
  <xsl:value-of select="firstName" /><xsl:text>
</xsl:text><xsl:value-of select="lastName"
/><xsl:text>&#xa;</xsl:text>
</xsl:template>

</xsl:stylesheet>

Regards,
Mukul

On 2/8/06, Billie <whynot77(_at_)cooltoad(_dot_)com> wrote:
Hi everyone,
What I'd like to do is sort a list by the maximum value of a node that may
appear multiple times.  I think I'll do much better explaining this in code
rather than words, so here is the XML:

<employees>
       <employee>
               <firstName>Joe</firstName>
               <lastName>Black</lastName>
               <Patent>
                       <date>2005-10-13</date>
                       <id>65-AHK</id>
               </Patent>
               <Patent>
                       <date>2006-01-03</date>
                       <id>65-AHK</id>
               </Patent>
               <Patent>
                       <date>2004-08-24</date>
                       <id>65-AHK</id>
               </Patent>
       </employee>
       <employee>
               <firstName>Jane</firstName>
               <lastName>Doe</lastName>
               <Patent>
                       <date>2005-11-18</date>
                       <id>65-AHK</id>
               </Patent>
               <Patent>
                       <date>2006-01-19</date>
                       <id>65-AHK</id>
               </Patent>
       </employee>
<employees>

I'm looking to sort this list by which employee has the most recent Patent, so
in this case, Jane Doe would be first because her most recent Patent has a
date of 2006-01-19 and Joe Black's most recent Patent has a date of 
2006-01-03.

So I would want the XSL to be something like:
<xsl:apply-templates select="employee">
       <xsl:sort>
               (what do I do here?)
       </xsl:sort>
</xsl:apply-templates>

Thanks for any help!

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--