RE: [xsl] XSLT sort

Subject: RE: [xsl] XSLT sort
From: "Andreas L. Delmelle" <a_l.delmelle@xxxxxxxxxx>
Date: Thu, 20 May 2004 22:32:18 +0200
> -----Original Message-----
> From: Tomas Olsson [mailto:tomas.olsson@xxxxxxxxxxxxxxxxxxxxxxxx]
>

Hi,

> Im trying to get better performance by using keys, I have heard thats
> possible but I dont know how to do.
>

Well, depends on what you want to achieve.

Your initial code:

- applies templates to the Person nodes, sorted on @enamn
- for each Person node, applies templates to the @enamn node
- for each @enamn (one on each Person node), insert a copy of every Person
node with an @enamn equal to the current one

Unfortunately, we can only guess what the initial structure is that you're
trying to improve. My best guess is you want to create a variable containing
all unique @enamn values in the document, and use that to take control over
the template matching, like:

<xsl:key name="name-key" match="Person" use="@enamn" />

<xsl:template match="Katalog">
  <xsl:variable name="unique-names"
                select="Person[generate-id()=
                  generate-id(key('name-key',@enamn))]/@enamn" />
  <xsl:for-each select="$unique-names">
    <xsl:sort select="." order="ascending" />
    <xsl:apply-templates select="key('name-key',.)" />
  </xsl:for-each>
</xsl:template>

In this way, the sorting will only be performed on the group of unique names
instead of on all nodes in the document, which could mean a considerable
improvement in documents as large as you describe.


HTH!

Greetz,

Andreas

Current Thread