Re: [xsl] Copy element with attributes

Subject: Re: [xsl] Copy element with attributes
From: andrew welch <andrew.j.welch@xxxxxxxxx>
Date: Tue, 29 Nov 2005 13:56:17 +0000
> I have an xhtml file that I want to transform using
> xslt, like the one below. I want to prepend and append
> some text and change some body tag attributes but
> copy any other attributes. I cannot seem to get that
> done in the same transformation.
>
> An example:
>
> <html>
> <head>
> </head>
> <body text="#003366" bgcolor="#663300" onload="otherAttribs()">
> <p>My page</p>
> </body>
> </html>
>
> The result should be:
>
> <html>
> <head>
> </head>
> <body text="#000000" bgcolor="#ffffff" onload="otherAttribs()">
> Prepend text
> <p>My page</p>
> Append text
> </body>
> </html>

You want to use the identity transform with a special templates for
the <body> attributes and <p>:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

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

<xsl:template match="body/@text">
	<xsl:attribute name="text">#000000</xsl:attribute>
</xsl:template>

<xsl:template match="body/@bgcolor">
	<xsl:attribute name="text">#ffffff</xsl:attribute>
</xsl:template>

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

</xsl:stylesheet>


cheers
andrew

Current Thread