RE: [xsl] Removing namespace attributes

Subject: RE: [xsl] Removing namespace attributes
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 22 Sep 2005 12:59:52 +0100
exclude-result-prefixes only affects the namespaces created using literal
result elements. It has no effect on namespaces copied from the source
document using xsl:copy or xsl:copy-of.

XSLT 2.0 provides a copy-namespaces=yes|no attribute on these instructions.
In 1.0 you have to switch from using xsl:copy to using an modified-identity
template with xsl:element name="{local-name()}".

Rather than this:

<xsl:template match="@* | node()">
>      <xsl:if test="name()!='xlink:href'">
>        <xsl:copy>
>          <xsl:apply-templates select="@* | node()" />
>        </xsl:copy>
>      </xsl:if>
>    </xsl:template>

it's much cleaner to do this:

<xsl:template match="@* | node()">
        <xsl:copy>
          <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
</xsl:template>

<xsl:template match="@xlink:href"/>

Apart from anything else, it doesn't depend on the document author's choice
of namespace prefix.


Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Hank Ratzesberger [mailto:hankr@xxxxxxxxxxxxxxxx] 
> Sent: 22 September 2005 01:31
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Removing namespace attributes
> 
> I want to strip all namespaces and one 
> attribute (declared in the namespace).
> 
> In my stylesheet, I declare the namespaces
> and then list them in the exclude-result-prefixes.
> But it doesn't work.  The namespaces remain.
> 
> Thank you for your ideas,
> Hank
> 
> Hank Ratzesberger
> NEES Programmer
> Institute for Crustal Studies
> University of California, Santa Barbara
> 
> 
> <xsl:stylesheet version="1.0"
>   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>   xmlns:flextps="http://flextps.org/schema/";
>   xmlns:xlink="http://www.w3.org/1999/xlink";
>   exclude-result-prefixes="flextps">
>   <xsl:template match="@* | node()">
>      <xsl:if test="name()!='xlink:href'">
>        <xsl:copy>
>          <xsl:apply-templates select="@* | node()" />
>        </xsl:copy>
>      </xsl:if>
>    </xsl:template>
> </xsl:stylesheet>

Current Thread