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

Subject: RE: [xsl] XSL : how to turn <name> into <data elem="name">
From: "Sean Power" <spower@xxxxxxxxx>
Date: Wed, 7 Feb 2001 20:00:11 -0500
>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


Current Thread