yes, thats what i wanted. Now I tried a solution like this on a document
with 8000 lines:
<xsl:key name="name-key" match="Person" use="@enamn" />
<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>
But I didnt get any better performance. My document is like this:
<Katalog>
<Person fnamn="Orvar" enamn="Olsson" tfn="026-789536">
<Adress adress="Norrav. 34" postnr="50623"
postort="Soderhamn">japp</Adress>
<Cv>Har arbetat som konsult hos microsoft sedan barnsben</Cv><Info
alder="24"/>
</Person>
<Person fnamn="Orvar" enamn="Orre" tfn="026-782576">
<Adress adress="Sodrav. 34" postnr="50323" postort="Gavle"/>
<Cv>Har arbetat som stadare hos ericsson</Cv><Info alder="24"/>
</Person>
<Person fnamn="Per" enamn="Olsson" tfn="026-789536">
<Adress adress="Norrav. 34" postnr="50623" postort="Soderhamn"/>
<Cv>Sommarjobbat hos prv</Cv><Info alder="24"/>
</Person>
.
.
.
</Katalog>
And I have a lot of elements with the same "enamn" attribute. Is It
possible to solve it any other way to get better performance?
/Tomas
At 22:32 2004-05-20 +0200, you wrote:
> -----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
--+------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--