Re: [xsl] First Element in Sorted List

Subject: Re: [xsl] First Element in Sorted List
From: JBryant@xxxxxxxxx
Date: Wed, 1 Jun 2005 09:34:45 -0500
Hi, John,

You've hit the way I'd do it. However, XSL nearly always offers more than 
one way to do things. Here's a different way to approach your problem:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 

  <xsl:template match="items">
        <xsl:apply-templates select="item[@sortorder = 1]"/>
        <xsl:apply-templates select="item[@sortorder &gt; 1]">
          <xsl:sort select="@sortorder"/>

  <xsl:template match="item[@sortorder='1']">
    <p class="first"><xsl:value-of select="."/></p>

  <xsl:template match="item[@sortorder &gt; 1]">
    <p class="notfirst"><xsl:value-of select="."/></p>


As you can see, it is certainly not less verbose, and I doubt that it is 
more efficient, but it is another way.


Jay Bryant
Bryant Communication Services
(presently consulting at Synergistic Solution Technologies)

John <john-xsl-list@xxxxxxxx> 
06/01/2005 08:38 AM
Please respond to


[xsl] First Element in Sorted List

I am hoping to to confirm something before going in the wrong direction.

My process needs to take action on the first element in a list of 
elements where the logic to determine first is the lowest numeric value 
of the sortorder attribute.  I don't believe there is a one-line way to 
do this - I believe the entire list must be sorted, and then the 
position of each element after sort compared to determine if it is first.

Is there a shorter/less expensive way to code the following

<xsl:for-each select="item">
   <xsl:sort select="@sortorder" data-type="number" />
   <xsl:if test="position() = 1">
     <!-- this is the first element in the sorted list -->

I searched and found examples using this technique, but nothing really 
saying that this was the best or only approach.

Thanks in advance,


Current Thread