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