The generic way is to use the identity transform which copies everything but include specific templates to match any special cases:
Code:
<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>
<!--
Templates to match nodes that need changing go here
-->
<xsl:template match="ELEM2">
<ELEM3>
<xsl:apply-templates select="node()|@*"/>
</ELEM3>
</xsl:template>
</xsl:stylesheet>
Joe (MVP - xml)