xsl-list
[Top] [All Lists]

Re: problem: recursive templates slowing xalan processor down

2004-05-10 14:48:07


Hi Chris,

> im having a peculiar problem, ive made a xsl stylesheet that uses a
> recursive template. When i use xmlspy to perform the xsl
> transformation on a sample xml file everything works fine, but when
> i use a xalan processor (org.apache.xalan.xslt.Process) the
> recursive template seems to freeze the processing. First I pass
> about 15 nodes to the template wich then calls itself with one node
> less. and so on. In the beginning it goes fast but after 3 recursive
> calls everything slows down and finally looks like its frozen (in
> fact i still get some output but only after very long times). Is it
> possible that several recursive calls freeze the processor and how
> come everything works with the xmlspy debugger??

I don't know which processor the XML Spy debugger uses, but it might
be that it rewrites (tail) recursive calls into a loop and thus deals
with the recursion more efficiently than Xalan.

Having said that, Xalan is normally pretty good at that kind of
optimisation. (Perhaps you're using an old version? Check which
version you're using with system-property('xsl:version').) Seeing a
slowdown after only three recursive calls sounds quite severe.

Can you show us your recursive template? Perhaps there are some
rewrites that could help speed it up...

Here is a link to the xslt file
http://www10.brinkster.com/cpoppe/misc/MCTFbit.xsl

And a link to a sample xml file
http://www10.brinkster.com/cpoppe/misc/coastlittle.xml

What this pretty much does is select all the substream elements in the xml file, then read in a length ( part of a list) and take the sum over these values. Ive left a number of things out of the xslt im using but this one still gives the same problems, starting with 15 nodes then 14 , 13 and 12 (and slowing down and once it gets to 11 or even 10 times take that much time it seems its frozen) Im not looking for a completely alternate solution cause ive reduced the sample xmlfile and the xslt a lot. Just an explanation would be helpfull a lot!

Ive noticed that when i call the calcPart1 template for the first time with .../m:substream[last()] (so i only pass about 5 nodes to the template) everything goes smooth.
Here is a link to this xslt file
http://www10.brinkster.com/cpoppe/misc/MCTFbit.xsl

sincerely,
Chris

_________________________________________________________________
Download nu MSN Messenger 6.2 http://messenger.msn.be?DI=1032&XAPID=2604&SU=hotmail.be