Subject: RE: 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
|