Optimization and performance depend on the processor.
As it happens, with Saxon, if you use "//x" inside a loop then Saxon will
remember the value and avoid re-evaluating it each time, while if you use
/*/x, it won't.
The moral is, don't guess - measure!
Putting the value in a variable that's set outside the loop, whatever the
expression used, is almost certainly not going to make performance any
worse.
I don't think there's likely to be any significant difference between using
a single-valued key, as shown here, and using a global variable. Using a
global variable seems much more intuitive.
But here I'm guessing.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Geert Josten [mailto:Geert(_dot_)Josten(_at_)daidalos(_dot_)nl]
Sent: 03 November 2004 08:57
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] A question on optimization
Hi Jochen,
<xsl:for-each select="//justus:choice">
<xsl:element name="TR">
<xsl:variable name="current" select="."/>
<xsl:for-each select="//justus:part[(_at_)visible='true']">
<xsl:variable name="dbfeld" select="."/>
<xsl:element name="td">
<xsl:for-each
select="$current/@*[name()=$dbfeld/@dbfeld]">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
...
<xsl:for-each select="//justus:choice">
<xsl:element name="tr">
<xsl:element name="td"><xsl:value-of
select="a1"/></xsl:element>
<xsl:element name="td"><xsl:value-of
select="a2"/></xsl:element>
...
</xsl:element>
</xsl:for-each>
David is right. Using // is rather expensive in terms of
performance. Use full paths as David
suggests, or try using keys if the choice and part elements
may occur in unpredictable locations:
<xsl:key name="choices" match="justus:choice" use="'all'" />
<xsl:key name="parts" match="justus:part" use="'all'" />
<xsl:for-each select="key('choices', 'all')">
and
<xsl:for-each select="key('parts', 'all')[(_at_)visible='true']">
Grtz,
Geert
--+------------------------------------------------------------------
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>
--+--