Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


Re: [xsl] round-robin template call

From: "G. Ken Holman" <gkholman@-------------------->
To:
Date: 4/5/2009 4:53:00 PM
At 2009-04-05 18:47 +0200, Aragon Gouveia wrote:
I'm having difficulty figuring out how to perform something in XSLT 
1.0.  I want to be able to call a template at random points in an 
XSLT document, and each time the template is called it outputs a 
different version of a node.

Then pass a parameter value and trigger on the passed value.



 Example:



<xsl:stylesheet>
<xsl:template match="/">
        <output>
                <xsl:call-template name="makenode"/>
                <tagX>data</tagX>
                <tagY>data</tagY>
                <xsl:call-template name="makenode"/>
        </output>
</xsl:template>
<xsl:template name="makenode">
        <xsl:choose>
                <xsl:when test="oddcalls()">
                        <tagA type="odd">data</tagA>
                </xsl:when>
                <xsl:when test="evencalls()">
                        <tagA type="even">data</tagA>
                </xsl:when>
        </xsl:choose>
</xsl:template>
</xsl:stylesheet>

You seem to be showing a binary testing requirement, so I've written 
it as such:



<xsl:stylesheet>
<xsl:template match="/">
        <output>
                <xsl:call-template name="makenode">
                 <xsl:with-param name="param-name" select="true()"/>
               </xsl:call-template>
                <tagX>data</tagX>
                <tagY>data</tagY>
                <xsl:call-template name="makenode">
                 <xsl:with-param name="param-name" select="false()"/>
               </xsl:call-template>
        </output>
</xsl:template>
<xsl:template name="makenode">
  <xsl:param name="param-name"/>
        <xsl:choose>
                <xsl:when test="$param-name">
                        <tagA type="odd">data</tagA>
                </xsl:when>
                <xsl:otherwise>
                        <tagA type="even">data</tagA>
                </xsl:otherwise>
        </xsl:choose>
</xsl:template>
</xsl:stylesheet>

Obviously variables and parameters can't be altered once declared, 
and I can't think of a way of doing this with a recursive template.

Where does recursion come into your requirement?



I hope this helps.



. . . . . . . Ken



--
XSLT/XSL-FO/XQuery training in Los Angeles (New dates!) 2009-06-08
Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
Video lesson:    http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
Video overview:  http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal


transparent
Print
Mail
Like It
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent