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

Reply via email to