|
Subject: Re: [xsl] how to optimize recursive algorithm? From: David Tolpin <dvd@xxxxxxxxxxxxxx> Date: Thu, 27 Nov 2003 18:16:55 +0400 (AMT) |
> For instance, say you have a source document like this:
>
> <top>
> <a/>
> <b/>
> <c/>
> <d/>
> </top>
>
> and the output of "b" depends on the position of "a", "c" depends on "b" and
> so on.
Functional languages are good at expressing loops.
<xsl:template name="position">
<!-- get results of previous computations via parameters -->
<xsl:param name="prev-x"/><xsl:param name="prev-y"/>
<!-- compute current values based on the current node and results computed for the previous one -->
<xsl:variable name="x" select="$prev-x + @width"/>
<xsl:variable name="y" select="$prev-y + @height"/>
<!-- output the current node with the results computed -->
<xsl:copy>
<xsl:copy-of select="@*">
<xsl:attibute name="x"><xsl:value-of select="$x"/></xsl:attribute>
<xsl:attibute name="y"><xsl:value-of select="$y"/></xsl:attribute>
</xsl:copy>
<!-- call the template for the next sibling, if there is one -->
<xsl:for-each select="following-sibling::*[1]">
<xsl:call-template name="position">
<xsl:with-param name="prev-x" select="$x"/>
<xsl:with-param name="prev-y" select="$y"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] how to optimize recursive alg, FC | Thread | RE: [xsl] how to optimize recursive, Michael Kay |
| [xsl] Function's at XSLT, Bruno LLopes | Date | [xsl] sum variables from templates, Markus Hanel |
| Month |