This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Mysterious appearance of xmlns="" in output


The head element in your Header template in in no namespace. Since there's
no prefix on it, it has to be in no namespace or the default namespace. And
since there's no default namespace in scope (in your stylesheet) for that
element, MSXML has to turn off the default namespace when serializing the
head element that it turned on with the html element. You have to think of
the elements in your stylesheet as being a completely independant XML
document form the result document.

Just move your default namespace declaration in your stylesheet up to the
xsl:stylesheet element and that will make all of the unprefixed elements in
your stylesheet be in the same namespace which is probably what you want. Or
you could but another default namespace declaration on your head element but
that could start to get cumbersome and error prone depending on the size of
your transform.

Hope this helps,
Jason

> -----Original Message-----
> From: Steve Rosenberry
> [mailto:Steve.Rosenberry@ElectronicSolutionsCo.com]
> Sent: Friday, March 08, 2002 11:30 AM
> To: xsl-list@lists.mulberrytech.com
> Subject: [xsl] Mysterious appearance of xmlns="" in output
> 
> 
> 
> Well hopefully it's only mysterious to me...
> 
> I get extra xmlns="" attributes in different HTML tags in the output
> generated by MSXML4.  I've reduced the problem to the following XSLT:
> ---------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> 
> <xsl:stylesheet version="1.0"
>   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 
>   <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
> 
>   <!-- VERY SIMPLE ROOT TEMPLATE MAKES A SINGLE CALL TO Header-->
>   <xsl:template match="/">
> 
>     <html xmlns="http://www.w3.org/1999/xhtml"; lang="en" 
> xml:lang="en">
> 
>       <xsl:call-template name="Header"/>
> 
>     </html>
> 
>   </xsl:template>
> 
>   <!-- HEADER TEMPLATE SIMPLY OUTPUTS A BASIC HTML Head TAGSET-->
>   <xsl:template name="Header">
> 
>     <head>
>       <meta http-equiv="Content-Type" content="text/html;
>            charset=iso-8859-1"/>
>       <title>Title</title>
>     </head>
> 
>   </xsl:template>
> 
> </xsl:stylesheet>
> ---------------------------------------------------
> 
> 
> I expected the following output from the transformation:
> ---------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml";>
>   <head>
>     <meta http-equiv="Content-Type" 
>           content="text/html; 
>           charset=iso-8859-1" />
>     <title>Title</title>
>   </head>
> </html>
> ---------------------------------------------------
> 
> What I get instead is a 'head' tag that looks like this:
> 
>     <head xmlns="">
> 
> If I replace the <xsl:call-template name="Header"/> with the contents
> from the Header template, the xmlns attribute is NOT inserted.
> 
> If I remove the xmlns="http://www.w3.org/1999/xhtml"; 
> attribute from the
> <html> tagset and leave the <xsl:call-template name="Header"/>, the
> xmlns attribute again is NOT inserted.
> 
> If I go back to inserting the <head> tagset with a call-template and
> change the Header template to the following (I know it's invalid HTML,
> but for testing purposes I don't believe that should matter):
> ---------------------------------------------------
>   <xsl:template name="Header">
> 
>     <head/>
>       <meta http-equiv="Content-Type" content="text/html;
>            charset=iso-8859-1"/>
>       <title>Title</title>
> 
>   </xsl:template>
> ---------------------------------------------------
> 
> I get three extra xmlns="" attributes as follows:
> ---------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml";>
>   <head xmlns="" />
>     <meta http-equiv="Content-Type" 
>         content="text/html; 
>         charset=UTF-8" 
>         xmlns="" />
>     <title xmlns="">Title</title>
> </html>
> ---------------------------------------------------
> 
> Does anyone understand this behaviour, and more importantly 
> does anyone
> know how I can turn it off without sacrificing call-templates or the
> xmlns namespace definition?  Actually for that matter, I'm 
> not sure what
> the xmlns namespace definition does for me.  I added it when 
> I converted
> the website to XHTML just because I blindly copied from an example
> somewhere.  If I can sacrifice that without violating any 
> spec, I will, 
> although, I'd still like to understand what's happening...
> 
> Thanks.
> 
> -- 
> Steve Rosenberry
> Sr. Partner
> 
> http://BetterGoBids.com -- The Premier Overture (formerly GoTo) 
>                            Bid Management Tool
> 
> Electronic Solutions Company -- For the Home of Integration
> http://ElectronicSolutionsCo.com
> 
> (610) 670-1710
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]