Subject: Re: [xsl] follow up re: key execution speed From: tcn@xxxxxxxxxxxxx (Trevor Nash) Date: Fri, 10 Aug 2001 15:17:54 GMT |
Wild idea: include your zip lookup file in the stylesheet either by external entity reference or xsl:include (in the latter case you have to put a stylesheet element in the zip file). In both cases you will have to invent a namespace for it. This *may* be enough to convince Xalan that its the same document every time rather than a new one, hence it will only rebuild the index when you prepare the stylesheet. I believe Saxon can be made to behave this way, but Xalan may be different. If I were you I think I would write a simple Java class to read the zip table and access it from an extension function. Its not difficult, and the memory footprint will be less than a tenth of the XSLT method. Regards, Trevor Nash >I wrote in last week and received much good advice on using keys to perform >lookups during XSL execution. I was advised, properly I am sure, that keys >are damn fast and the best way to do nearly anything. However my problem is >a little unusual, and is resulting in unsatisfactory performance. > >The trick is this: while I have been advised that keys are speed for any >lookup that will be performed more than once in a transform, my situation is >a little more complicated. I only do this lookup once per transform, but I >perform this transform many times (thousands!) on different source >documents. I was hoping to get the speed benefit of the key across these >multiple transformations. > >My XSL templates make use of two data files, Zips.xml, which maps zip codes >to dealer codes, and Dealers.xml, which contains information about each >dealer. The idea is to use a key (ziptorc) over the (very large - 400K) Zips >file (looks like <ZIP zip='10001' rc='2'/>) to perform the zip-to-dealer >mapping, then to use another key over the dealer file (rctodealer) to >perform a generic templating of the dealer informaiton. My templates are as >follows: > ><xsl:key name="ziptorc" match="ZIP" use="@zip"/> ><xsl:key name="rctodealer" match="DEALER" use="@rc"/> ><xsl:template name="TARGETBYZIP"> > <!-- target by ZIP --> > <xsl:variable name="ZIP"> > <xsl:value-of select="ZIP/@val"/> > </xsl:variable> > <xsl:variable name="RC"> > <xsl:for-each select="document('Zips.xml')"> > <xsl:value-of select="key('ziptorc', $ZIP)/@rc"/> > </xsl:for-each> > </xsl:variable> > <xsl:for-each select="document('Dealers.xml')"> > <xsl:apply-templates select="key('rctodealer', $RC)"/> > </xsl:for-each> ></xsl:template> > ><xsl:template match="DEALER"> > <!-- generic template for displaying dealer information here --> ></xsl:template> > >I am using Xalan, creating and persisting a Templates object. I am then >creating a Transformer object to perform each transform. Performance is very >slow; seems to me that it is reloading the data files and recreating the >keys every time it performs the transform. > >Is there some set of changes, to the XSL or to the Java, that will enable me >to get the blazing performance I require? > >Thanks very much for your help. > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list -- Traditional training & distance learning, Consultancy by email Melvaig Software Engineering Limited voice: +44 (0) 1445 771 271 email: tcn@xxxxxxxxxxxxx XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] follow up re: key execution s, Mike Lamb | Thread | Re: [xsl] follow up re: key executi, Jeni Tennison |
Re: [xsl] Is this possible in xsl ?, Jeni Tennison | Date | Re: [xsl] opposite of preceding-sib, Jeni Tennison |
Month |