Re: [xsl] A question on optimization

Subject: Re: [xsl] A question on optimization
From: Geert Josten <Geert.Josten@xxxxxxxxxxx>
Date: Wed, 03 Nov 2004 09:56:47 +0100
Hi Jochen,

  <xsl:for-each select="//justus:choice">
    <xsl:element name="TR">
      <xsl:variable name="current" select="."/>
      <xsl:for-each select="//justus:part[@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')[@visible='true']">

Grtz,
Geert

Current Thread