Maybe you should explore something like this:
    <xsl:element name='image'>
        <xsl:for-each select='@*'>
            <xsl:attribute name='qname(.)'><xsl:value-of select='.' /></xsl:attribute>
This way, the transformer is at least aware of the tag you are trying to insert into the output.

From: []
Sent: Wednesday, October 24, 2007 11:58 AM
To: Brian Minchau
Subject: Re: [Announce] Escaping double quotation marks in XSL

> Assuming that you are only interested in stream serialization, have you
> thought of doing the serialization yourself for particular elements?  For
> example, something like this:
> <!-- self serialization of image elements with tag for image done in
but delegate attributes serialization -->
> <xsl:template match="image">
>  <![CDATA[ <image]>><xsl:apply-templates select="@*"/> <![CDATA[ >]>>
> </xsl:template>

I *REALLY* detest that idiom. I've seen many people hurt themselves by trying to hand-generate XML; I consider it a very bad practice. Unless you're forced to do it in order to work with a downstream tool which has not been implemented correctly, I would recommend finding another solution. Any other solution.