Re: [xsl] how to remove namespace declarations

Subject: Re: [xsl] how to remove namespace declarations
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Tue, 28 Aug 2007 14:29:05 +0200
Frank Marent wrote:

i have to remove namespace declarations in certain elements. i.e. i have this one:

<Facts xmlns:html="http://www.w3.org/HTML/1998/html4"; xmlns:xlink="http://www.w3.org/1999/xlink";>
<lotOfElements/>
</Facts>


and i want to get this one:

<Facts>
  <lotOfElements/>
</Facts>

i can't manage to get there. even when i try to remove all attributes
from the element

<xsl:template match="Facts"> <xsl:copy> <xsl:apply-templates select="*"/> </xsl:copy> </xsl:template>

does not remove these unnecessary namespaces.

xsl:copy copies the namespace nodes that are in scope. Use xsl:element instead e.g.
<xsl:template match="Facts">
<xsl:element name="Facts">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>


Or, if you are using XSLT 2.0, I think you can do e.g.
  <xsl:template match="Facts">
    <xsl:copy copy-namespaces="no">
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

Note that <xsl:apply-templates select="@* | node()"/> would not hurt as in the XPath/XSLT data model namespace declarations are not attribute nodes but rather result in namespace nodes.

--

	Martin Honnen
	http://JavaScript.FAQTs.com/

Current Thread