RE: [xsl] Unwanted namespace after using COPY-OF

Subject: RE: [xsl] Unwanted namespace after using COPY-OF
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sat, 8 Jan 2005 23:00:24 -0000
xsl:copy-of copies a complete subtree, unchanged, including all its
namespaces.

exclude-result-prefixes only affects the behavior of literal result elements
in the stylesheets, it has no effect on xsl:copy-of.

XSLT 2.0 allows you to suppress namespaces by means of a new attribute on
xsl:copy-of (copy-namespaces="yes|no")

In XSLT 1.0, if you want to copy everything except namespaces you need:

<xsl:template match="*">
  <xsl:element name="{name()}" namespace="{namespace-uri()}">
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

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

> -----Original Message-----
> From: gerritjan [mailto:gerritjankoekkoek@xxxxxxx] 
> Sent: 08 January 2005 21:12
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Unwanted namespace after using COPY-OF
> 
> Newbe question?
> This is my XSLT:
> 
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0"
>      xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>         exclude-result-prefixes="xsi"
>      >
>    <xsl:output method = "xml" indent = "yes" />
> 
>    <xsl:template match="/" >
>      <onderwerpen>
>         <xsl:apply-templates select="onderwerp">
>      </onderwerpen>
>    </xsl:template>
> 
>    <xsl:template match="onderwerp" >
>      <xsl:variable name="v_titel"><xsl:value-of 
> select="@titel"/></xsl:variable>
>      <xsl:variable name="v_datum"><xsl:value-of 
> select="@datum"/></xsl:variable>
>      <xsl:variable name="v_datum_einde"><xsl:value-of 
> select="@datum_einde"/></xsl:variable>
>      <xsl:variable name="v_menu"><xsl:value-of 
> select="@menu"/></xsl:variable>
>      <xsl:variable name="v_submenu"><xsl:value-of 
> select="@sub_menu"/></xsl:variable>
>      <xsl:variable name="v_beveiliging"><xsl:value-of 
> select="@beveiliging"/></xsl:variable>
> 	<onderwerp titel="{$v_titel}" datum="{$v_datum}" 
> datum_einde="{$v_datum_einde}" menu="{$v_menu}" 
> submenu="{$v_submenu}" 
> beveiliging="{$v_beveiliging}" >
>        			<xsl:copy-of select="subtitel"/>
>        			<xsl:copy-of select="kenwoorden"/>
>        			<xsl:copy-of 
> select="over_cdls_persoon"/>
>        			<xsl:copy-of select="inleidingtekst"/>
>        			<xsl:copy-of select="onderwerptekst"/>
>        			<xsl:copy-of select="auteur"/>
>        			<xsl:copy-of select="bron"/>
> 	</onderwerp>
>    </xsl:template>
> 
> </xsl:stylesheet>
> 
> The result contains:
> <kenwoorden xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
> <inleidingtekst xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
> 
> It looks like using <XSL:COPY-OF...> is adding this 
> namespacestatement, 
> I did not intend this "xmlns:xsi..." to be added!
> I try to suppress it by the 2 lines added to the:
> <xsl:stylesheet version="1.0"
>      xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>         exclude-result-prefixes="xsi">
> 
> This does not help?
> Any suggestions?
> 
> Gerritjan Koekkoek

Current Thread