[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Default namespace in result document

Subject: Re: Default namespace in result document
From: Geert Josten <Geert.Josten@xxxxxxxxxxx>
Date: Wed, 07 Dec 2005 21:24:17 +0100
xsl no namespace
How about adding the following to the xsl:stylesheet element:

exclude-result-prefixes="foo"

Cheers

andrew welch wrote:

I have been using XSLT successfully for a few years now but have never
tried to make namespaces work, mainly because at least one component in
the system has not supported them properly.  I've now tried using them
for the first time and although I get a result document that is correct
it's not quite what I had expected.  Here's an example:

[XML input:]

<?xml version="1.0"?>
<foo xmlns="http://example.com/foo">
  <blah/>
</foo>


[XSLT:]


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0"
  xmlns:foo="http://example.com/foo">

<xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <foo:root>
      <xsl:apply-templates mode="copy"/>
    </foo:root>
  </xsl:template>

  <xsl:template match="*" mode="copy">
    <xsl:copy>
      <xsl:apply-templates mode="copy"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>


So the stylesheet contains literal result elements in namespace foo, and also copies elements from the input XML that are in namespace foo. I was hoping to get something like this:

<?xml version="1.0"?>
<root xmlns="http://example.com/foo">
  <foo>
    <blah/>
  </foo>
</root>

i.e. the default namespace is defined on the root element, and no
namespace things are used anywhere else.  But instead, using libxslt
version 1.1.15, I get this:

<?xml version="1.0"?>
<foo:root xmlns:foo="http://example.com/foo">
  <foo xmlns="http://example.com/foo">
    <blah/>
  </foo>
</foo:root>

This is not ideal because it makes files much larger than they need to
be.  I guessed that there would be some xsl:output attribute to select a
default namespace but I can't see anything that does exactly this.  I
can't help feeling that I've missed something obvious.  Can someone
suggest what I need to do?

(I assume that this is also an issue for people trying to generate
"HTML-compatible XSLT" - not something I have tried to do yet...)


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 puts all literal result elements in that namespace, so you would
need to remove the prefixes.

This creates the result:

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://example.com/foo">
   <foo>

<blah/>

   </foo>
</root>

...which I think is what you are after.

cheers
andrew



-- Drs. G.P.H. Josten Consultant



Daidalos BV
Source of Innovation
Hoekeindsehof 1-4
2665  JZ  Bleiswijk
Tel: +31 (0) 10 850 1200
Fax: +31 (0) 10 850 1199
www.daidalos.nl


De informatie - verzonden in of met dit emailbericht - is afkomstig van Daidalos BV en is uitsluitend bestemd voor de geadresseerde. Indien u dit bericht onbedoeld hebt ontvangen, verzoeken wij u het te verwijderen. Aan dit bericht kunnen geen rechten worden ontleend.


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.