[xsl] Re: Default namespace in result document

Subject: [xsl] Re: Default namespace in result document
From: Phil Endecott <spam_from_xslt_list@xxxxxxxxxxxx>
Date: Fri, 09 Dec 2005 21:16:45 +0000
I asked how to get this:

<root xmlns="http://example.com/foo";>
   <foo>
     <blah/>
   </foo>
</root>

rather than this:

<foo:root xmlns:foo="http://example.com/foo";>
   <foo xmlns="http://example.com/foo";>
     <blah/>
   </foo>
</foo:root>

i.e. with no more namespace attributes than necessary.

Geert Josten suggested:
> How about adding the following to the xsl:stylesheet element:
>     exclude-result-prefixes="foo"

Unfortunately this doesn't work; I get exactly the same output.

Andrew Welch suggested:
> Use a default namespace in the stylesheet, eg:
>
> <xsl:stylesheet
>   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>   version="1.0"
>   xmlns="http://example.com/foo";>
>
> (note the foo prefix has been removed)

This does work - thanks Andrew - but I'm not keen on changing the namespace prefixes for all the literal elements like this; I was hoping for an easier way, such as an attribute on xsl:output or something like that.

More googling has found the xsl:namespace element in 2.0. Is this useful for this problem? Is there anything else I can do?

Cheers,

--Phil.

Current Thread