Subject: Re: Adding child element based on attribute value [XSLT 1.0]
From: pankaj.c@xxxxxxxxxxxxxxxxxx
Date: Sat, 8 Jan 2011 18:21:41 +0530
|
AHA!!!! Thanks Ken but I am using 1.0.
"G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
01/08/11 06:20 PM
Please respond to
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
To
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
cc
Subject
Re: Adding child element based on attribute value [XSLT 1.0]
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
|