xsl-list
[Top] [All Lists]

Re: [xsl] how to remove namespace declarations

2007-08-28 06:37:41
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/

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>