Re: [xsl] why do I get duplicate <HTML> after xsl:copy ?

Subject: Re: [xsl] why do I get duplicate <HTML> after xsl:copy ?
From: Rahil <qamar_rahil@xxxxxxxxxxx>
Date: Thu, 02 Jun 2005 17:00:07 +0100
Andrew Welch wrote:


The reason is that you have:


<xsl:copy>
 <xsl:copy-of select="."/>

..which copies the <html> element by itself (xsl:copy), and then copies
the <html> element, it's attributes and all it's descendents
(xsl:copy-of).


So if I get rid of <xsl:copy> from within the <xsl:template match="HTML"> it should not copy <HTML> twice ? I tried this approach hoping that by removing <xsl:copy> it should not copy the present node. This solved the duplicate <HTML> at the start but also removed the end tag </HTML> at the end of the file. Im obviously going wrong somewhere but dont know how to resolve it.

I apply the same logic in the next block

<xsl:template match="BODY">
       <xsl:copy>
           <xsl:copy-of select="."/>
           <xsl:apply-templates select="TABLE | TABLE/TR | TABLE/TR/TD"/>
       </xsl:copy>
</xsl:template>

Then why doesnt the result contain duplicate <BODY> tags ?

I think you are after the 'identity stylesheet':

<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:stylesheet>

This is the basis for the stylesheet when you want to copy most of the
xml, making a few changes here and there.



Can I use this approach for copying an HTML file? Isnt this applicable only to XML files?


Thanks
Rahil

Current Thread