[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Adding child element based on attribute value [XSLT 1.0]


Subject: Re: [xsl] Adding child element based on attribute value [XSLT 1.0]
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Sat, 08 Jan 2011 07:49:19 -0500

At 2011-01-08 17:20 +0530, pankaj.c@xxxxxxxxxxxxxxxxxx wrote:
Is there a way if I have XML.

<my_group count=3/>

The output I am expecting is adding child element based on value of
@count.

Output something like

<my_group count="3">
        <group name="type1"/>
        <group name="type2"/>
        <group name="type3"/>
</mygroup>

Any ideas will be highly appreciated.

You don't say how your name= attributes are derived, so I guessed.


The answer below using XSLT 2 is quite straightforward.

I hope this helps.

. . . . . . . . . . Ken

T:\ftemp>type pankaj.xml
<my_group count="3"/>
T:\ftemp>type pankaj.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                exclude-result-prefixes="xsd"
                version="2.0">

<xsl:output indent="yes"/>

<xsl:template match="my_group">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:for-each select="1 to xsd:integer(@count)">
      <group name="type{.}"/>
    </xsl:for-each>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>
T:\ftemp>xslt2 pankaj.xml pankaj.xsl
<?xml version="1.0" encoding="UTF-8"?>
<my_group count="3">
   <group name="type1"/>
   <group name="type2"/>
   <group name="type3"/>
</my_group>
T:\ftemp>


-- Contact us for world-wide XML consulting & instructor-led training Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Legal business disclaimers: http://www.CraneSoftwrights.com/legal


Current Thread
Keywords