Re: [xsl] exclude-result-prefixes not removing the xmlns attribute in the root element

Subject: Re: [xsl] exclude-result-prefixes not removing the xmlns attribute in the root element
From: Juergen Donnerstag <juergen.donnerstag@xxxxxxxxx>
Date: Tue, 3 Jan 2006 12:15:27 +0100
May be I wasn't clear. I do not want to remove the namespace prefix
from all elements and attributes. I just want to remove
xmlns:wicket="http://wicket..."; from the root tag

thanks
Juergen

On 1/3/06, andrew welch <andrew.j.welch@xxxxxxxxx> wrote:
> On 1/3/06, Juergen Donnerstag <juergen.donnerstag@xxxxxxxxx> wrote:
> > I need to remove the xmlns attribute from the root tag of the output.
> > From various docs I understood that the xsl processor inserts it
> > automatically and by means of exclude-result-prefixes it can be
> > removed. In my case however the
> > xmlns:wicket="http://wicket.sourceforge.net"; attribute is already part
> > of the root tag of the input and it seems to me
> > exclude-result-prefixes="wicket" does not remove it. The output
> > actually is the same; with and without exclude-result
> > prefixes="wicket".
> >
> > The xsl sheet I'm using:
> > <?xml version="1.0" encoding="ISO-8859-1"?>
> >
> > <xsl:stylesheet version="1.0"
> >         xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> >         xmlns:wicket="http://wicket.sourceforge.net";
> >         exclude-result-prefixes="wicket">
> >
> > <xsl:output method="xml" omit-xml-declaration="yes"/>
> >
> > <!--  Just copy everything. This is basically the same as xsl:copy-of -->
> > <xsl:template match="/ | @* | node()">
> >   <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy>
> > </xsl:template>
> >
> > </xsl:stylesheet>
> >
> > and the input:
> >
> > <span xmlns:wicket="http://wicket.sourceforge.net";
> > wicket:id="test4"><span wicket:id="myBorder2"
> > testAttr="myValue"><wicket:border>before body -
> > <wicket:body>border</wicket:body> - after
> > body</wicket:border></span></span>
> >
> > Any idea on how to remove xmlns:wicket from the output? Your help is
> > very much appreciated. Thanks
>
> In 2.0 you can use copy-namespaces="no"
>
> In 1.0, the namespace and element name are fixed together, the only
> way to 'remove' it is to create a new element in no namespace, so
> modify your identity transform to be:
>
> <xsl:template match="*">
>   <xsl:element name="{local-name()}">
>     <xsl:apply-templates select="@*|*"/>
>   </xsl:element>
> </xsl:template>
>
> <xsl:template match="@*">
>         <xsl:attribute name="{local-name()}">
>                 <xsl:value-of select="."/>
>         </xsl:attribute>
> </xsl:template>
>
> cheers
> andrew

Current Thread