[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Namespaces II


Subject: RE: [xsl] Namespaces II
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Wed, 2 Jul 2003 10:51:35 +0100

> 
> Following XML:
> --------------
> 
> <Content xmlns="urn:DTD930" 
> xmlns:xlink="http://www.w3.org/1999/xlink">
> <text_eng>
> <p>Test Test Test Test</p>
> </text_eng>
> </Content>
> 
> Following XSL-Stylesheet:
> -------------------------
> 
> <xsl:stylesheet version="1.0" 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> xmlns:text="urn:DTD930">
> 
> <xsl:template match="text:Content">
> <xsl:apply-templates/>
> </xsl:template>
> 
> <xsl:template match="text:text_eng">
> <text_module xml:lang="en">
> <xsl:copy-of select="*"/>
> </text_module>
> </xsl:template>
> 
> I get the following output:
> ---------------------------
> <text_module xmlns="urn:DTD930" xml:lang="en">
> <p xmlns="urn:DTD930">Test Test Test Test</p>
> </text_module>
> 
> Question:
> ---------
> 
> Is there a way to get the xmlns attribute away (delete) from 
> the output???

This is what I get with Saxon:

<text_module xml:lang="en" xmlns:text="urn:DTD930">
   <p xmlns="urn:DTD930" xmlns:xlink="http://www.w3.org/1999/xlink">Test
Test Test Test</p>
</text_module>

Your output as shown is incorrect. Either you have made a cut-and-paste
error in transcribing it, or there is a bug in your processor.

The xmlns="urn:DTD930" declaration is necessary, because that's the
namespace that the <p> element is in. The text namespaces in the output
is unused, and can therefore be eliminated using
exclude-result-prefixes="text" on the xsl:stylesheet element. The xlink
namespace is also unused, but when you copy the <p> element, all its
in-scope namespaces are copied with it, "just in case". In XSLT 2.0 you
can prevent this using copy-namespaces="no" on the xsl:copy-of
instruction.

Michael Kay


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread
Keywords