Re: Generating Test Data

Subject: Re: Generating Test Data
From: Mike Brown <mike@xxxxxxxx>
Date: Mon, 12 Jun 2000 21:52:08 -0600 (MDT)
> 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) &gt; 0">
    <xsl:copy-of select="."/>
    <xsl:if test="number($num) &gt; 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


Current Thread