| 
 
Subject: Is failed key-lookups very slow in Xalan-J 1.2? From: tra@xxxxxxxxxxxxxxx (Thorbjoern Ravn Andersen) Date: Wed, 22 Nov 2000 11:04:22 +0100  | 
I am developing an XSLT-version of our current application in which we
need to render XHTML-documents representing products, where the prices
shown to the customer depends on the ACCESSCODE which is passed to the
style sheet as a parameter.
My question deals with the speed of the "key"-construction in Xalan
1.2 (which is the platform we use -- I need good arguments to switch
to e.g Saxon.   Speed might be a good argument)
My timings show that if I replace the key-lookup with an empty string,
my code runs in 0.5 seconds (overhead from other routines), and if my
key-function succeedes in all 66 cases for my sample file then it runs
in about 1.0 second.  Each key-lookup returns either 0 or 1 node.
If the key-function _fails_ in all 66 cases then it runs in 5.5
seconds, which is rather unfortunate, since this is the default setup
for unregistered users.
Narrowing the scope for the key-function with a xsl:for-each around,
did not help.
Could a kind soul help me understand why Xalan-J 1.2 behaves like
this?  Is there a way to circumvent it?
The XSLT-code follows.  The various constructions I have tried is
still there as comments.
<xsl:key name="price-for" match="VALUENUM" use="../PRICEKEY"/>
<xsl:template match="STIBO-PRICE">
  <xsl:variable name="value" select="concat(@value,',',$ACCESSCODE)"/>
  <!--  <xsl:for-each select="$database">
-->
    <xsl:variable name="price" select="key('price-for', $value)"/>
      <!--<xsl:variable name="price" select="''"/>-->
    <xsl:choose>
      <xsl:when test="string-length($price)=0"> 
        <xsl:value-of select="$PRICELESS"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$price"/>
      </xsl:otherwise>
    </xsl:choose>
    <!--      </xsl:for-each>
-->
</xsl:template>
The database section looks like
<html>
  <database ...>
    <table0 ....>
      <record0>
        <PRICEKEY>2360455,1,RSES</PRICEKEY>
        <VALUENUM>247</VALUENUM>
      </record0>
      <record0>
        <PRICEKEY>2360455,2,RSES</PRICEKEY>
        <VALUENUM>222</VALUENUM>
      </record0>
    ....
    </table0>
    <table1>... [other irrelevant stuff]
    ...
    </table1>
  </database>
  ... rest of XHTML-file
</html>
The database variable which I have experimented with (to narrow the
scope) is defined as
    <xsl:variable name="database" select="/html/database"/>
Thanks in advance,
-- 
  Thorbjørn Ravn Andersen                   "...sound of... Tubular Bells!"
  http://bigfoot.com/~thunderbear
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
  | 
| <- Previous | Index | Next -> | 
|---|---|---|
| RE: Merging Two DTDs for XSLT - Can, sara . mitchell | Thread | Re: Is failed key-lookups very slow, Jeni Tennison | 
| RE: Merging Two DTDs for XSLT - Can, Bassi Suk | Date | RE: Getting & to convert to %26 in , Chris McGrath | 
| Month |