xsl-list
[Top] [All Lists]

Re: Trouble with namespaces and running identity transform on XHTML

2004-03-10 17:23:43
On Wednesday 10 March 2004 22:22, James J. Ramsey wrote:

except in the output, that prefixes elements with
"h:", which I do *not* want.


Sorry, I misunderstood the request. Not just into the XHTML 
namespace but empty prefix as well. This works for me on 
Sablotron and Saxon but see the note below on your question.

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

<xsl:template match="*">
<xsl:choose>
    <xsl:when test="namespace-uri()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:when>
    <xsl:otherwise>
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="@*|node()" />
        </xsl:element>
    </xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>


Anyway, what I'm not sure of is whether the XSLT spec
guarantees that

<xsl:element name="NCName"> <!-- No prefix in NCName
-->
 <!-- Content of NCName . . . -->
</xsl:element>

will result in an element with the unprefixed name
NCName in the default namespace, or if it's just that
XSLT processors happen to serialize that as "<NCName>
. . . </NCName>".


In short, I don't think there are any guarantees about this 
particularly across different processors, although a general 
goal of some processor writers will have been to make the output 
as 'nice' as possible, i.e. minimise namespace declarations and 
try and preserve prefixes.

Kev.



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list