Re: [xsl] Element name as attribute value

Subject: Re: [xsl] Element name as attribute value
From: Marcin Miłkowski <milek_pl@xxxxx>
Date: Thu, 11 Aug 2005 14:24:28 +0200
Shailesh napisaE(a):
Hi All,
I have to transform element name say "comments" as attribute value to "<tsta
name="comments">". Can it be possible using XSLT 2.0.
Xml contains:
<?xml version=1.0?>
<test>
<text:p text:trans_attr="trans">
Sample para. This needs to be translated. <comments>This is not translated</comments>
</text:p>
</test>

This XML is not valid - you're missing quotes around the XML version ("1.0") and the namespace declaration. But the thing you're talking about is the easiest transformation I could think of, so it's possible also in XSLT 1.0.


I corrected it thus:

<?xml version="1.0"?>
<test xmlns:text="http://www.text.com"; >
<text:p text:trans_attr="trans">
Sample para. This needs to be translated.
<comments>This is not translated</comments>
</text:p>
</test>

using a stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">

<xsl:output method="xml" indent="yes"/>

<xsl:template match="@*|node()">
	  <xsl:copy>
		<xsl:apply-templates select="@*|node()"/>
	</xsl:copy>
</xsl:template>


<xsl:template match="comments"> <xsl:element name="tsta"> <xsl:attribute name="name"> <xsl:text>comments</xsl:text> </xsl:attribute> <xsl:value-of select="."/> </xsl:element> </xsl:template>

</xsl:stylesheet>

you would get:

<?xml version="1.0" encoding="UTF-16"?>
<test xmlns:text="http://www.text.com";>
<text:p text:trans_attr="trans">
Sample para. This needs to be translated.
<tsta name="comments">This is not translated</tsta>
</text:p>
</test>

which is almost what you wanted, but with a correct namespace declaration.

Best,
	Marcin

Current Thread