RE: [xsl] Sorting issue, sorting by description given code

Subject: RE: [xsl] Sorting issue, sorting by description given code
From: Jarno.Elovirta@xxxxxxxxx
Date: Wed, 29 Oct 2003 08:51:18 +0200
Hi,

> Aim: To output a list of those Group names for which a Point 
> belongs to,
> sorted alphabetically.
> 
> From above we have three points, so the desired result would be thus
> 
> Group List...
> 
> DEFAULT
> LOTS
> TREES 

You're almost there, see the inline comments.

  <xsl:key name="groups" match="Point" use="@group" />
  <!-- Add new key for sorting -->
  <xsl:key name="x" match="Group" use="@num" />
  <xsl:template match="SEEDB">
    <table class = "style1" border="1" cellspacing="0" cellpadding="2" width="650">
      <tr >
        <th align="center">Point Groups</th>
      </tr>
      <xsl:for-each select="Points/Point[generate-id(.) = generate-id(key('groups',@group)[1])]">
        <!-- Sort according to the name -->
        <xsl:sort select="key('x', @group)/@name" data-type="text"/>
        <xsl:apply-templates select="."/>
      </xsl:for-each>
    </table>
  </xsl:template>
  <xsl:template match="Point">
    <tr>
      <td align="center">
        <!-- You had a variable $group here, you want to use current() function -->
        <xsl:value-of select="/SEEDB/Groups/Group[@num = current()/@group]/@name"/>
      </td>
    </tr>
  </xsl:template>

> sort the nodeset, and then output, but I wanted to avoid this if
> possible, since I am led to believe that some parsers don't have an
> equivalent "msxsl:node-set" function.

Well, almost, if not all XSLT processors have some sort of e:node-set extension. See <http://exslt.org/> for the common extension for RTF -> node-set conversion.

Cheers,

Jarno - Assemblage 23: Pages

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


Current Thread