When I was fighting this problem, it looked like the when a namespace was declared, in the manner of xmlns="http://www.w3.org/1999/xhtml"
this was the equivalent of adding a namespace with the name prefix name "", which was a little different than having no prefix name. So it generated tags of the form <"":div> It seems odd that XSL does anything with namespaces when you code your own output tags, but this could be what is going on here. You might try using your "default" empty namespace again, and also include with it exclude-result-prefixes="" and let me know if this helps... -----Original Message----- From: Ferdinand Soethe [mailto:[EMAIL PROTECTED] Sent: Wednesday, May 02, 2007 10:15 AM To: xalan-j-users@xml.apache.org Subject: [Fwd: Re: Why does Doctype change processing of a document] Thanks to all of you for helping me understand my mistake. At least I know what is going wrong now. Adding xmlns:xhtml="http://www.w3.org/1999/xhtml" to my stylesheet worked well but added all those ugly xhtml:... to the generated elements. So I declared xhtml as default namespace xmlns="http://www.w3.org/1999/xhtml" to make them disappear. Which worked really well in this template and let to the resulting document being free of xhtml:... > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" > version="1.0" > > > <!-- toolbox for copying everything over to the target --> > <xsl:import href="copyover.xsl"/> > > <!-- Match html, disregard the namespace --> > <xsl:template match="/*[local-name()='html']"> > <xsl:apply-templates select="*[local-name()='body']"/> > </xsl:template> > > <!-- Match body, disregard namespace --> > <xsl:template match="/*[local-name()='html']/*[local-name()='body']"> > <div class="content"> > <xsl:apply-templates/> > </div> > </xsl:template> except for the div-element. Has anyone the patience to explain? And also: I expected to be able to do away with /*[local-name()='html'] now that xhtml is default namespace. But it doesn't work that way. Why? And when I change the style-sheet to > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml" > version="1.0" exclude-result-prefixes="xhtml"> > > <!-- toolbox for copying everything over to the target --> > <xsl:import href="copyover.xsl"/> > > <!-- Match html, disregard the namespace --> > <xsl:template match="/*[local-name()='html']"> > <xsl:apply-templates select="*[local-name()='body']"/> > </xsl:template> > > <!-- Match body, disregard namespace --> > <xsl:template match="/*[local-name()='html']/*[local-name()='body']"> > <div class="content"> > <xsl:apply-templates/> > </div> > </xsl:template> > and try to remove xhtml with exclude-result-prefixes then things turn around. div will no longer have a namespace attribute while all the copied element do. Misterious really. Best regards, Ferdinand Soethe