[xsl] Duplicate Nodes in XSL and transform them

Subject: [xsl] Duplicate Nodes in XSL and transform them
From: "Punnoose, Roshan" <punnooser@xxxxxxxxxxxxxxx>
Date: Tue, 30 Jan 2007 12:41:00 -0500
I might be asking for too much from XSL, but this is what I want to do:

-A template that takes any node and copies it
-Each copy has to replace a string "replaceMe" with the string
"replaced" + i. ( 'i' being the iteration of the copy)

So something like this:

Before:

<element>
  <innerElement>
    <value>replaceMe</value>
  </innerElement>
</element>

After , 3 copies of the innerElement:

<element>
  <innerElement>
    <value>replaced1</value>
  </innerElement>
<innerElement>
    <value>replaced2</value>
  </innerElement>
<innerElement>
    <value>replaced3</value>
  </innerElement>
</element>


So I was thinking of writing a template that would do look like this:

<!-print all iterations --:
<xsl:template name="print">
                        <xsl:param name="node"/>
                        <xsl:param name="times"/>
                        <xsl:call-template name="loop">
                                    <xsl:with-param name="a"
select="1"/>
                                    <xsl:with-param name="times"
select="$times"/>
                        </xsl:call-template>
            </xsl:template>
            <xsl:template name="loop">
                        <xsl:param name="a"/>
                        <xsl:param name="times"/>
                        <xsl:call-template name="printNode">
                                    <xsl:with-param name="a"
select="$a"/>
                        </xsl:call-template>
                        <!-- Test condition and call template if less
than number -->
                        <xsl:if test="$a &lt; $times">
                                    <xsl:call-template name="loop">
                                                <xsl:with-param name="a"
select="$a + 1"/>
                                                <xsl:with-param
name="times" select="$times"/>
                                    </xsl:call-template>
                        </xsl:if>
            </xsl:template>
            <xsl:template name="printNode">
                        <xsl:param name="a"/>
                        <xsl:copy>
                                    //Copy the current node and replace
string("replaceMe") with string("replaced" + a)
                        </xsl:copy>
            </xsl:template>

I thought of doing a string replace and then serializing the output out
as xml, but I can't seem to figure this out.

Any ideas?


Roshan Punnoose
Phone: 301-497-6039


Roshan Punnoose
Phone: 301-497-6039

Current Thread