[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] xmlns=""


Subject: Re: [xsl] xmlns=""
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Tue, 22 Feb 2011 15:15:40 +0100

Merrilees, David wrote:

When I add a default namespace to an element, it's direct descendants acquire an xmlns="". Does anyone know why this is, or how to avoid it?

Input:

<?xml version="1.0" encoding="UTF-8"?>
<html>
         <head>
                 <title>Vmtejte</title>
         </head>
         <body id="home">
         <body>
</html>

XSL:

<xsl:template match="/html">
         <html xmlns="http://www.w3.org/1999/xhtml">
                 <xsl:sequence select="./node()"/>
         </html>
</xsl:template>

Output:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
         <head xmlns="">

The input element you copy has no namespace thus in the new document to preserve that information the serializer adds the xmlns="".
If you want to put your input elements that are in no namespace into the XHTML namespace then you need to do that for each result element you create.


So instead of doing xsl:copy or copy-of or sequence to copy elements from the input to the output you need to use apply-templates with e.g.
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://www.w3.org/1999/xhtml">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>



--


	Martin Honnen
	http://msmvps.com/blogs/martin_honnen/


Current Thread
Keywords