Having an explicitly declared namespace attribute in
xsl:element works in xsltproc, Saxon, and Xalan, but
not Sablotron, which outputs
<ns_1:html xmlns:ns_1="http://www.w3.org/1999/xhtml">
<ns_2:head xmlns:ns_2="http://www.w3.org/1999/xhtml">
--snip--
</ns_2:head>
</ns_1:html>
On Sablotron you can get better output by including a prefix in
the xsl:element name attribute. Like this,
<xsl:element name="{concat('h:',local-name())}"
namespace="http://www.w3.org/1999/xhtml">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
The 'h' acts as a hint which the processor may ignore but
Sablotron doesn't. This also avoids the multiple namespace
declaration problem. Note that I have also changed name() to
local-name(). I have not tested this with the other processors
but I would doubt it will cause them any problems.
Kev.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list