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]

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


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