xsl-list
[Top] [All Lists]

RE: [xsl] empty namespace declaration being generated

2007-01-24 05:26:38
What I want is that all of the elements, attributes, etc. in 
the output xml file are under the www.fred.com/something namespace.

Then all you need to do is to put them in that namespace:

<security xmlns="www.fred.com/something">

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


 

________________________________

From: David Bertoni [mailto:david(_dot_)bertoni(_at_)gmail(_dot_)com]
Sent: Tue 1/23/2007 7:46 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] empty namespace declaration being generated



Scott Smith wrote:
I apologize for not seeing it in the FAQ.  I did search for 
it before 
I sent the email (did again after I saw your email), but 
didn't find 
anything that looked like what I was seeing.  If could give 
me a url, 
I'm happy to read it especially if after reading what's below you 
believe it explains the issue.

<snip>

I'm using the latest version (2.7.0) of xalan-c, but will 
be using a 
MS xslt library in production which I think means I'm stuck 
at xslt 1.0.

There is no such version of Xalan-C.  The latest version is 1.10.

Here's an xsl that demonstrates the problem.

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
      <xsl:output method="xml" indent="yes" />
     
      <xsl:template match="/">
              <stocks xmlns="http://www.fred.com/something";>
                      <xsl:apply-templates select="/Info/Stock" />
              </stocks>
      </xsl:template>

      <xsl:template match="Stock" />
      <xsl:template match="Stock[Type/@Name='tickerSymbol']">
              <security>
                      <xsl:attribute name="exchange">
                              <xsl:value-of 
select="substring-before(Name, ':')" />
                      </xsl:attribute>
                      <xsl:attribute name="ticker">
                              <xsl:value-of 
select="substring-after(Name, ':')" />
                      </xsl:attribute>
              </security>
      </xsl:template>
</xsl:stylesheet>

Here's the input (there's no namespace declaration in the 
source file):

<?xml version="1.0" encoding="utf-8"?> <Info>
  <Stock>
    <Type Name="category" />
    <Name>stocks</Name>
  </Stock>
  <Stock>
    <Type Name="tickerSymbol" />
    <Name>NASDAQ:BMET</Name>
    <Description>Biomet, Inc.</Description>
  </Stock>
  <Stock>
    <Type Name="tickerSymbol" />
    <Name>NYSE:JNJ</Name>
    <Description>Johnson &amp;amp; Johnson.</Description>
  </Stock>
</Info>

The generated output file contains:

<?xml version="1.0" encoding="UTF-8"?> <stocks 
xmlns="http://www.fred.com/something";>
    <security xmlns="" exchange="NASDAQ" ticker="BMET"/>
    <security xmlns="" exchange="NYSE" ticker="JNJ"/> </stocks>


Which is correct.  You generate a "stocks" element in the 
result tree using
a literal result element in your stylesheet that has a 
namespace URI of
"http://www.fred.com/something";.  Then, you generate two "security"
elements in the result using a literal result in in the 
stylesheet that
have empty namespace URIs.  To preserve the expanded name of 
the element,
the serialization process generates default namespace 
declarations that
ensure the elements have an empty namespace URI.

You need to decide exactly what you want.  If you don't want 
the "stocks"
element in the namespace "http://www.fred.com/something";, 
then remove the
default namespace declaration.  If you want the "security" 
elements in the
same namespace as the "stocks" element, then add the default namespace
declaration to the "security" literal result element.  If you 
want all of
the literal result elements in the stylesheet in the namespace
"http://www.fred.com/something";, then you can move the 
default namespace
declaration to the stylesheet element.

Dave

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--