xsl-list
[Top] [All Lists]

RE: XSLT sort

2004-05-20 13:32:18
-----Original Message-----
From: Tomas Olsson 
[mailto:tomas(_dot_)olsson(_at_)soderhamn(_dot_)mail(_dot_)telia(_dot_)com]


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



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