Re: [xsl] Slow XSLT

Subject: Re: [xsl] Slow XSLT
From: Cleyton Jordan <cleytonjordan@xxxxxxxxxxx>
Date: Sun, 2 Mar 2008 13:00:44 +0000 (GMT)
Hi Manfred,

Thanks for your reply.

I will try your approach and let you know if it
improves the speed of the transformation. 

One thing I will have to figure out is a way to
measure the speed improvement. I do not want to only
look at the watch and count the seconds.

I might use Javascript with the time function and
alert how long each approach takes (start time - end
time). Do you have any suggestions on how I could
measure that in an easier way?

Also, I did not quite understand your the simpler
approach suggestion. Could you please elaborate a bit
more on that?  

> Another (simpler) approach would be to limit the
> maximum number of
> dimensions for the table so you can use match
> patterns like
> match="ColGrp"
> match="ColGrp/ColGrp"
> match="ColGrp/ColGrp/ColGrp"
> match="ColGrp/ColGrp/ColGrp/ColGrp"
> match="ColGrp[Col]"
> match="Col"


Cheers

C 

--- Manfred Staudinger <manfred.staudinger@xxxxxxxxx>
wrote:

> On 01/03/2008, Cleyton Jordan
> <cleytonjordan@xxxxxxxxxxx> wrote:
> >  However, I thought that by using // followed by a
> >  predicate (
> //ColGrp[count(ancestor::ColGrp)=$depth]
> >  ), I would go straight to only those inner most
> ColGrp
> >  elements parent of the Col elements.
> No, the XPath processor first has to find a ColGrp
> element by looking
> into every corner of the input doc, and then check
> for the condition.
> 
> >  There is one problem with your approach though.
> You
> >  are assuming that there will always be only two
> ColGrp
> >  like this:
> >
> >  <xsl:for-each
> > 
>
select="/Reports/Report/Columns/ColGrp/ColGrp[count(ancestor::ColGrp)=$depth]">
> 
> I would propose a slightly different approach:
> <xsl:for-each
> select="/Reports/Report/Columns/ColGrp">
>    <xsl:apply templates mode="ColGrp"/>
> </xsl:for-each>
> passing the parameters needed for your processing
> and using only two
> templates for ColGrp: one for the innermost ColGrp,
> and one for the
> others
> <xsl:templates match="ColGrp[Col]" mode="ColGrp">
> processing for the innermost ColGrp here
> </xsl:for-each>
> <xsl:templates match="ColGrp" mode="ColGrp">
> processing here (you can always test the depth with
> count(ancestor::ColGrp))
> </xsl:for-each>
> plus one for Col:
> <xsl:templates match="Col" mode="ColGrp">
> processing here
> </xsl:for-each>
> 
> Another (simpler) approach would be to limit the
> maximum number of
> dimensions for the table so you can use match
> patterns like
> match="ColGrp"
> match="ColGrp/ColGrp"
> match="ColGrp/ColGrp/ColGrp"
> match="ColGrp/ColGrp/ColGrp/ColGrp"
> match="ColGrp[Col]"
> match="Col"
> 
> Hope this helps,
> 
> Manfred
> 
> 



      __________________________________________________________
Sent from Yahoo! Mail.
A Smarter Inbox. http://uk.docs.yahoo.com/nowyoucan.html

Current Thread