RE: [xsl] copy-of namespace problem

Subject: RE: [xsl] copy-of namespace problem
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 1 Apr 2005 10:24:12 +0100
The important thing to remember about copy-namespaces="no" (as with
exclude-result-prefixes) is that it only suppresses the copying of a
namespace node that is unused. It doesn't cause the element you are copying
to be moved into a different namespace (or into no namespace). In your
example, as far as I can see, the only namespace that's in scope for
uc:tgroup is the uc namespace itself (and of course the xml namespace), and
although the uc namespace isn't copied, it will be regenerated in the result
tree as part of the namespace fixup process, because the result tree will
always contain namespace nodes for all namespaces that are used in element
and attribute names.

If you want to change the name of the uc:tgroup element and its children so
that they are in no namespace, you need to use a modified form of the
identity template:

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

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


> -----Original Message-----
> From: Klocker Christoph [mailto:Christoph.Klocker@xxxxxxxxxxxxx] 
> Sent: 01 April 2005 09:56
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] copy-of namespace problem
> 
> Hi,
> I am copying some elements, and want to exclude the namespace, but the
> copy-namespaces="no" seems not to work. Using Saxon-8.2
> 
> My stylesheet
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="2.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> xmlns:xs="http://www.w3.org/2001/XMLSchema";
> xmlns:xlink="http://www.w3.org/1999/xlink";
> xmlns:html="http://www.w3.org/HTML/1998/html4";
> exclude-result-prefixes="html xs uc" 
> extension-element-prefixes="xlink"
> xmlns:uc="http://www.infinity-loop.de/upcast/generic-dtd-v30";>
> 	<xsl:output method="xml" version="1.0" encoding="UTF-8"
> indent="yes"/>
> 	<xsl:template match="//uc:table">
> 		<calstable>
> 			<xsl:copy-of select="uc:tgroup"
> copy-namespaces="no"/>
> 		</calstable>
> 	</xsl:template>
> </xsl:stylesheet>
> 
> My xml file
> <?xml version="1.0" encoding="UTF-8"?>
> <publication publ-day="20" publ-month="5" publ-year="2003" 
> issue="5404">
> 	<file id="5404/17/2003" doctyp="5404">
> 		<uc:part
> xmlns:uc="http://www.infinity-loop.de/upcast/generic-dtd-v30";>
> 			<uc:table frame="none" colsep="0" rowsep="0">
> 				<uc:tgroup cols="3" colsep="0"
> rowsep="0">
> 					<uc:colspec colnum="1"
> colname="col1" colwidth="245"/>
> 					<uc:colspec colnum="2"
> colname="col2" colwidth="132"/>
> 					<uc:colspec colnum="3"
> colname="col3" colwidth="141"/>
> 					<uc:tbody>
> 						<uc:row>
> 							<uc:entry
> valign="top">
> 								<uc:par
> kind="Text standard" halign="justified">Durchschnitt 2000 = 
> 100</uc:par>
> 							</uc:entry>
> 							<uc:entry
> valign="top">
> 								<uc:par
> kind="Text standard" halign="justified">105,7</uc:par>
> 							</uc:entry>
> 							<uc:entry
> valign="top">
> 								<uc:par
> kind="Text standard" halign="justified">
> 	
> <uc:inline kind="bold">+1,3%</uc:inline>
> 	
> </uc:par>
> 							</uc:entry>
> 						</uc:row>
> 					</uc:tbody>
> 				</uc:tgroup>
> 			</uc:table>
> 		</uc:part>
> 	</file>
> </publication>
> 
> thanks
> christoph

Current Thread