This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Generating Test Data
- To: xsl-list at mulberrytech dot com
- Subject: Re: Generating Test Data
- From: Mike Brown <mike at skew dot org>
- Date: Mon, 12 Jun 2000 21:52:08 -0600 (MDT)
- Reply-To: xsl-list at mulberrytech dot com
> I would like to use XSL to generate a test XML document from a
> 'template' XML document that contains a root and a fixed set of child
> elements and attributes. The resultant test document would contain a
> dummy root element and an arbitary number of 'copies' of the content of
> the template document. I wish to pass a parameter into the
> transformation or use an attribute of the root element of the template
> document to control the number of copies created. Passing the paramter
> and making a single copy I'm sure I can handle.
>
> However is there a way of setting up a loop (sorry to use this word) in
> the style sheet to allow this 'cloning' to occur ?
Given a parameter $num that is the number of copies you want, just have
the template that matches the root node call a named template, passing it
$num. The named template should look like this:
<xsl:template name="MakinCopies">
<xsl:param name="$num"/>
<xsl:if test="number($num) > 0">
<xsl:copy-of select="."/>
<xsl:if test="number($num) > 1">
<xsl:call-template name="MakinCopies">
<xsl:with-param name="num" select="number($num) - 1"/>
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:template>
It's not really a loop; it's recursion. The number() tests aren't
necessary if you're careful about how you create the first $num; just
being extra careful.
- Mike
____________________________________________________________________
Mike J. Brown, software engineer at My XML/XSL resources:
webb.net in Denver, Colorado, USA http://www.skew.org/xml/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list