Subject: Re: [xsl] Benefits of using xsl:key From: Jesper Tverskov <jesper.tverskov@xxxxxxxxx> Date: Tue, 3 Nov 2009 12:19:45 +0100 |
The example works convincingly! By modifying the simple example by Michael MC<ller-Hillebrand: Input.xml <Doc> <value oid="f37">some text</value> <value oid="f61">some text</value> <value oid="f042">some other text</value> </Doc> Copy and pasting so we have 3000 lines. And modifying his stylesheet to: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output indent="yes"/> <xsl:template match="value[.=preceding::value]"> <xsl:copy> <!-- add attribute and skip content --> <xsl:apply-templates select="@*"/> <xsl:attribute name="xrefid" select="preceding::value[.=current()][last()]/@oid"/> </xsl:copy> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> Transformation with an old Saxon-B9 from inside Oxygen takes around 10s. After using xsl:key and the following stylesheet: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output indent="yes"/> <xsl:key name="value-content" match="value" use="."/> <xsl:template match="value[.=preceding::value]"> <xsl:variable name="first" select="key('value-content', .)[1]"/> <xsl:copy> <xsl:choose> <xsl:when test=". is $first"> <!-- pass through content --> <xsl:apply-templates select="@*"/> <xsl:apply-templates/> </xsl:when> <xsl:otherwise> <!-- add attribute and skip content --> <xsl:attribute name="xrefid" select="$first/@oid"/> <xsl:apply-templates select="@*"/> </xsl:otherwise> </xsl:choose> </xsl:copy> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> Transformation takes 0.1s, or is 100 times faster! It turned out to be easy to construct an example after all. Thanks for the help. Next I will test the nice example provided by MK. Cheers, Jesper
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Benefits of using xsl:key, Michael Kay | Thread | Re: [xsl] Benefits of using xsl:key, Jesper Tverskov |
Re: [xsl] Break functionality in X, Anil Kumar Veeramall | Date | Re: [xsl] good Open source IDE Tool, Syd Bauman |
Month |