RE: [xsl] XSLT sort

Subject: RE: [xsl] XSLT sort
From: Tomas Olsson <tomas.olsson@xxxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 20 May 2004 21:06:53 +0200
Im trying to sort a large XML document. I used this XSLT before but it takes a very long time to sort a big document, with big I mean around 16 000 lines.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>


<xsl:template match="Katalog">
<xsl:copy>
<xsl:apply-templates select="Person">
<xsl:sort select="@enamn"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>

<xsl:template match="Person">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>

I heard that it possible to get better performance if I put the nodes in a key and sorted on the key. Its that Im trying to achive. Do you know how its possible to get better performance? Im using MSXML and the method transformeNodeToObject.

/Tomas

At 21:06 2004-05-19 +0100, you wrote:
>
> I get some weird problems with this XSLT. If a element has the same
> attribute "enamn" like another element, it gets duplicated.
>
>
> <xsl:template match="@enamn">
>   <xsl:for-each select="key('mykey',.)">
>    <xsl:copy-of select="."/>
>   </xsl:for-each>
> </xsl:template>
>

key('mykey',.) selects all the elements that have a value for mykey equal to
the value of the context node. So this will do exactly what you describe:
each time you hit the value X, it will output one copy of each node whose
value is X.

I don't know what you're trying to achieve by using a key here.

Michael Kay

Current Thread