This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: XSL : how to turn <name> into <data elem="name">


>I am a beginner in XSL. I would like to convert XML document into another
>XML document using XSL. The only transformation is to do

><name>value<name/> INTO <data elem="name">value</data>

>for all tags in incoming XML. How can I do this ?

Try this:

<xsl:template match="*">
	<xsl:element name="data">
		<xsl:attribute name="elem"><xsl:value-of
select="name(.)"/></xsl:attribute>
		<xsl:value-of select="."/>
	</xsl:element>
</xsl:template>

This will work if none of the XML is nested. I am only presuming this from
your example because your example doesn't show any child elements. However,
if you do have elements inside elements -

e.g. <name>
		<my_name>Me</my_name>
	</name>

Then do this:

<xsl:template match="*">
	<xsl:element name="data">
		<xsl:attribute name="elem"><xsl:value-of
select="name(.)"/></xsl:attribute>
		<xsl:apply-templates/>
	</xsl:element>
</xsl:template>

This will run through the template match for the element's children as well,
e.g:

<name>
	<my_name>value</my_name>
<name/>

will become 

<data elem="name">
	<data elem="my_name">value</data>
</data>


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]