-----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