xsl-list
[Top] [All Lists]

RE: Performance Tuning

2004-11-10 10:17:34

The XSL that I use has  three "preceding-sibling::"
The time taken to parse a 150KB XML in Xalan is 1.9
sec and with Saxon8 its 1.6 secs.

Since the above parsing is done frequently in my
application with different input XMLs. I need to
further reduce the transformation timing (in
milliseconds may be). The only bottleneck I see are
the 3 preceding-sibling. Can we somehow remove them
or
use some other logic, to reduce my transformation
time.

Rather than walk the preceding-sibling axis many times, why not perform
a single pass in a global variable and then key into that for the
positions:

So, the top-level variable:

<xsl:variable name="parentGroup">
  <xsl:for-each select="ParentGroup">
    <parentgroup id="generate-id()" pos="position()"/>
  </xsl:for-each>
</xsl:variable>

And the key:

<xsl:key name="parentGroups" match="ParentGroup" use="@id"/>

Then, instead of using count(preceding-sibling::ParentGroup), use:

<xsl:value-of select="key('parentGroups', generate-id())/@pos"/>

Remember you will need to change the context node to $parentGroup before
using the key.

If you do this, please post back any changes in performance.

cheers
andrew



<Prev in Thread] Current Thread [Next in Thread>