Subject: RE: [xsl] XSLT sort From: Tomas Olsson <tomas.olsson@xxxxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 20 May 2004 22:54:29 +0200 |
<xsl:template match="Katalog"> <xsl:copy> <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:copy> </xsl:template>
<xsl:template match="Person"> <xsl:copy-of select="."/> </xsl:template>
> -----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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] XSLT sort, Andreas L. Delmelle | Thread | RE: [xsl] XSLT sort, Michael Kay |
Re: [xsl] saxon command line error , Mike Ferrando | Date | [xsl] serialization exception, shadab |
Month |