This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: [XSLT] [Q] Recursion Question/Concern
- To: <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: [xsl] [XSLT] [Q] Recursion Question/Concern
- From: "Michael Kay" <mhkay at iclway dot co dot uk>
- Date: Thu, 22 Mar 2001 03:42:32 -0000
- Reply-To: xsl-list at lists dot mulberrytech dot com
> I need to count and number "records" in an XML file.
> It would seem that recursion is the answer, but I am
> concerned about performance.
You have already had responses showing you how to do this without recursion.
>
> When using recursion I have noticed a 10:1 performance
> decrease over not using recursion. I assume that user
> error is responsible.
>
> In my XSL document I do the following:
>
> <xsl:template name="NumberStuff">
> <xsl:param name="Counter" />
>
> <xsl:if test="count(//RECORD) + 1 > $Counter">
>
The performance problem is not because your stylesheet is recursive, it is
because each time this template is called it is calculating count(//RECORD),
the number of RECORD elements in the document, which is an expensive
operation. A good optimizer would avoid doing it repeatedly, but this is
more difficult than you might think, because it has to reckon with the
possibility of multiple source documents, which would cause count(//RECORD)
to give different answers on different occasions. You could get a massive
performance boost by calculating count(//RECORD) in a global variable.
Mike Kay
Software AG
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list