Subjects
Home
Xalan extension functions
Fomatting question serializing DOM with pretty print
xalan with pull parser
Cannot find the declaration
Apache Xalan drop support to run on JRE 1 1 x
Why does Doctype change processing of a document
Node set to XML string via Java extensions in Xalan J: possible?
Templates/Transformers + thread safety???
Problem evaluating xpath with muliple prefix with different namespace
remove an arbitrary attribute from xsl output
Xalan3 XSLT 2 0 XPath 2 0 support?
Problem using compiled translets with Xalan !!
Xalan and jstl 1 1 problem with transform tag
NullPointer in DOM2DTM getLocalName
URIResolvers base parameter with xsltc and cascaded imports
Performance problem for Xalan J on intel dual core
Standard libraries in JAXP?
Serializing a DOM tree to XML file, customize entities replacement
Library Conflict Involving BCEL Library
A question on how users are using <xsl:message >
Kevin Cormier as a new Apache Xalan J committer
Struggling to iterate over tokenized string
Xalan count() trouble
Problem with recursive xpath
Error when switching to java 1 5
document( ' ')
Problem with Xalan2 7 0 transformation
cr/lf options
entity encoded XML
can xalan transform 2 xml using one xslt?
Xalan J JIRA defect review Monday October 16, 2006 from 2:00 to 3:30 pm ED
xsl transform with cdata section elements
xslt parameters not expanded
Weird behavior of XPath evaluate()
How to avoid <xsl:message > instruction prints stylesheet file informations ?
Cannot find SimpleTransform subdirectory after installing Xalan J
recover from document not found exceptions
jdk1 5 and Xalan jar differences?
Performance Issue
Error/Bug adding floating point numbers
XPathAPI: eval exp using nodes with default namespace
modifying xalan to output invalid XML
NullPointerException
mege two separate xml nodes into one
Is this a XALAN document identification bug?
is StylesheetRoot really java io Serializable ?
transform() fails for DOMSource but succeeds for StreamSource
Thoughts on Transformer parameter passing
HELP, Xalan and jstl 1 1 problem with transformer
Problem with XPath namespace axis?
string utils:replace deleting search string if replacement string is an HTML
help with enumeration values pls
xalan 2 5 1 vs 2 7 performance question
How to insert/update in XML document
HTML Serialization and Handling of Ampersands in HREF Attributes
XHTML link tag stripping
SystemId Unknown; Line #24; Column #49; java lang NullPointerException
xpath text() help
Apostrophe problem with xalan 2 7 0
How to set variables in XML document?
Links
Home
Oracle database error code ...
 
Search:  
Power your search with and, or, +, -, or "some phrase" operators.
Why does Doctype change processing of a document

Why does Doctype change processing of a document

2007-05-02       - By Erin Harris
Reply:     1     2     3     4     5     6     7  

Hi,

> except for the div-element

The div element is a literal element so all of the currently in scope
namespaces get copied to literal elements in the output document (unless
they have already been copied to a parent element).  From the XSLT 1.0
Specification, Section 7.7.1 Literal Result Elements (
http://www.w3.org/TR/xslt#literal-result-element)

The created element node will also have a copy of the namespace nodes that
were present on the element node in the stylesheet tree with the exception
of any namespace node whose string-value is the XSLT namespace URI (
http://www.w3.org/1999/XSL/Transform), a namespace URI declared as an
extension namespace (see [14.1 Extension Elements]), or a namespace URI
designated as an excluded namespace.

> 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?

The default namespace is not used when matching nodes.  From the XPath 1.0
Specification, Section 2.3 Node Tests (
http://www.w3.org/TR/xpath#node-tests):

A QName in the node test is expanded into an expanded-name using the
namespace declarations from the expression context. This is the same way
expansion is done for element type names in start and end-tags except that
the default namespace declared with xmlns is not used: if the QName does
not have a prefix, then the namespace URI is null (this is the same way
attribute names are expanded).

> 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.

The copied elements are in the http://www.w3.org/1999/xhtml namespace in
the input document so the way copy works is that it makes sure that those
elements are also in that namespace in the output document.  Because you
excluded the namespace it no longer appears on the <div> element (which I
assume is the parent of the copied nodes) so now it must appear on the
copied nodes themselves since there is no ancestor which has declared the
namespace.

If you don't want any namespace declarations showing up at all in the
output document then you will probably have to do your own copy such as:

<xsl:template match="*">
 <xsl:element name="{local-name()}">
   <xsl:apply-templates
select="*|@*|text()|processing-instruction()|comment()"/>
 </xsl:element>
</xsl:template>

<xsl:template match="@*|text()|processing-instruction()|comment()">
 <xsl:copy>
   <xsl:apply-templates
select="*|@*|text()|processing-instruction()|comment()"/>
 </xsl:copy>
</xsl:template>

Thanks.

Erin Harris





Ferdinand Soethe <ferdinand@(protected)>
02/05/2007 02:14 PM

To
xalan-j-users@(protected)
cc

Subject
[Fwd: Re: Why does Doctype change processing of a document]








-------- Original Message --------
Subject: Re: Why does Doctype change processing of a document
Date: Wed, 02 May 2007 20:03:38 +0200
From: Ferdinand Soethe <ferdinand@(protected)>
To: Larry Trammell <larryt@(protected)>
References:
<22A20AD271DB4949836F85AACBB90A770892A0@(protected)>

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





<br><tt><font size=2>Hi,</font></tt>
<br>
<br><tt><font size=2>&gt; except for the div-element</font></tt>
<br>
<br><font size=2 face="sans-serif">The div element is a literal element
so all of the currently in scope namespaces get copied to literal elements
in the output document (unless they have already been copied to a parent
element). &nbsp;From the XSLT 1.0 Specification, Section 7.7.1 Literal
Result Elements (</font><a href="http://www.w3.org/TR/xslt#literal-result
-element"><font size=2 color=blue face="sans-serif">http://www.w3.org/TR/xslt
#literal-result-element</font></a><font size=2 face="sans-serif">)</font>
<br>
<br><font size=3>The created element node will also have a copy of the
namespace nodes that were present on the element node in the stylesheet
tree with the exception of any namespace node whose string-value is the
XSLT namespace URI (</font><tt><font size=3>http://www.w3.org/1999/XSL
/Transform</font></tt><font size=3>),
a namespace URI declared as an extension namespace (see </font><a href="http:/
/www.w3.org/TR/xslt#extension-element"><font size=3 color=blue><u>[<b>14.1
Extension Elements</u></b><u>]</u></font></a><font size=3>), or a namespace
URI designated as an excluded namespace. </font>
<br>
<br><tt><font size=2>&gt; And also: I expected to be able to do away with
/*[local-name()='html']<br>
&gt; now that xhtml is default namespace. But it doesn't work that way.
Why?<br>
</font></tt>
<br><font size=2 face="sans-serif">The default namespace is not used when
matching nodes. &nbsp;From the XPath 1.0 Specification, Section 2.3 Node
Tests (</font><a href="http://www.w3.org/TR/xpath#node-tests"><font size=2
color=blue face="sans-serif">http://www.w3.org/TR/xpath#node-tests</font></a>
<font size=2 face="sans-serif">):</font>
<br>
<br><font size=3>A </font><a href="http://www.w3.org/TR/REC-xml-names#NT-QName"
><font size=3 color=blue><u>QName</u></font></a><font size=3>
in the node test is expanded into an </font><a href="http://www.w3.org/TR/xpath
#dt-expanded-name"><font size=3 color=blue><u>expanded-name</u></font></a><font
size=3>
using the namespace declarations from the expression context. This is the
same way expansion is done for element type names in start and end-tags
except that the default namespace declared with </font><tt><font size=3>xmlns<
/font></tt><font size=3>
is not used: if the </font><a href="http://www.w3.org/TR/REC-xml-names#NT-QName
"><font size=3 color=blue><u>QName</u></font></a><font size=3>
does not have a prefix, then the namespace URI is null (this is the same
way attribute names are expanded). </font><font size=2 face="sans-serif"><br>
</font>
<br><tt><font size=2>&gt; and try to remove xhtml with &nbsp;exclude-result
-prefixes
then things turn<br>
&gt; around. div will no longer have a namespace attribute while all the<br>
&gt; copied element do. Misterious really.</font></tt>
<br>
<br><font size=2 face="sans-serif">The copied elements are in the </font><tt>
<font size=2>http://www.w3.org/1999/xhtml</font></tt><font size=2 face="sans
-serif">
namespace in the input document so the way copy works is that it makes
sure that those elements are also in that namespace in the output document.
&nbsp;Because you excluded the namespace it no longer appears on the &lt;div&gt;
element (which I assume is the parent of the copied nodes) so now it must
appear on the copied nodes themselves since there is no ancestor which
has declared the namespace.</font>
<br>
<br><font size=2 face="sans-serif">If you don't want any namespace declarations
showing up at all in the output document then you will probably have to
do your own copy such as:</font>
<br>
<br><font size=2 face="sans-serif">&lt;xsl:template match=&quot;*&quot;&gt;<
/font>
<br><font size=2 face="sans-serif">&nbsp; &lt;xsl:element name=&quot;{local
-name()}&quot;&gt;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &lt;xsl:apply-templates
select=&quot;*|@*|text()|processing-instruction()|comment()&quot;/&gt;</font>
<br><font size=2 face="sans-serif">&nbsp; &lt;/xsl:element&gt;</font>
<br><font size=2 face="sans-serif">&lt;/xsl:template&gt;</font>
<br>
<br><font size=2 face="sans-serif">&lt;xsl:template match=&quot;@*|text()
|processing-instruction()|comment()&quot;&gt;</font>
<br><font size=2 face="sans-serif">&nbsp; &lt;xsl:copy&gt;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &lt;xsl:apply-templates
select=&quot;*|@*|text()|processing-instruction()|comment()&quot;/&gt;</font>
<br><font size=2 face="sans-serif">&nbsp; &lt;/xsl:copy&gt;</font>
<br><font size=2 face="sans-serif">&lt;/xsl:template&gt;</font>
<br>
<br><font size=2 face="sans-serif">Thanks.</font>
<br><font size=2 face="sans-serif"><br>
Erin Harris<br>
<br>
</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>Ferdinand Soethe &lt;ferdinand
@(protected)&gt;</b>
</font>
<p><font size=1 face="sans-serif">02/05/2007 02:14 PM</font>
<td width=59%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td><font size=1 face="sans-serif">xalan-j-users@(protected)</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td><font size=1 face="sans-serif">[Fwd: Re: Why does Doctype change processing
of a document]</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><tt><font size=2><br>
<br>
-------- Original Message --------<br>
Subject: Re: Why does Doctype change processing of a document<br>
Date: Wed, 02 May 2007 20:03:38 +0200<br>
From: Ferdinand Soethe &lt;ferdinand@(protected)&gt;<br>
To: Larry Trammell &lt;larryt@(protected)&gt;<br>
References:<br>
&lt;22A20AD271DB4949836F85AACBB90A770892A0@(protected)&gt;<br>
<br>
Thanks to all of you for helping me understand my mistake. At least I<br>
know what is going wrong now.<br>
<br>
Adding xmlns:xhtml=&quot;http://www.w3.org/1999/xhtml&quot; to my stylesheet<br>
worked well but added all those ugly xhtml:... to the generated elements.<br>
<br>
So I declared xhtml as default namespace<br>
xmlns=&quot;http://www.w3.org/1999/xhtml&quot; to make them disappear.<br>
<br>
Which worked really well in this template and let to the resulting<br>
document being free of xhtml:...<br>
<br>
&gt; &lt;xsl:stylesheet<br>
&gt; &nbsp; &nbsp; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
xmlns=&quot;http://www.w3.org/1999/xhtml&quot;<br>
&gt; &nbsp; &nbsp; version=&quot;1.0&quot; &gt;<br>
&gt; &nbsp; &nbsp; <br>
&gt; &nbsp; &nbsp; &lt;!-- toolbox for copying everything over to the target
--&gt;<br>
&gt; &nbsp; &nbsp; &lt;xsl:import href=&quot;copyover.xsl&quot;/&gt;<br>
&gt; &nbsp; &nbsp; <br>
&gt; &nbsp; &nbsp; &lt;!-- Match html, disregard the namespace --&gt;<br>
&gt; &nbsp; &nbsp; &lt;xsl:template match=&quot;/*[local-name()='html']&quot;
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &lt;xsl:apply-templates select=&quot;*[local
-name()='body']&quot;/&gt;<br>
&gt; &nbsp; &nbsp; &lt;/xsl:template&gt;<br>
&gt; &nbsp; &nbsp; <br>
&gt; &nbsp; &nbsp; &lt;!-- Match body, disregard namespace --&gt;<br>
&gt; &nbsp; &nbsp; &lt;xsl:template match=&quot;/*[local-name()='html']/*[local
-name()='body']&quot;&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div class=&quot;content&quot;&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;xsl:apply-templates/&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>
&gt; &nbsp; &nbsp; &lt;/xsl:template&gt;<br>
<br>
except for the div-element.<br>
Has anyone the patience to explain?<br>
<br>
And also: I expected to be able to do away with /*[local-name()='html']<br>
now that xhtml is default namespace. But it doesn't work that way. Why?<br>
<br>
And when I change the style-sheet to<br>
<br>
&gt; &lt;xsl:stylesheet<br>
&gt; &nbsp; &nbsp; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
xmlns:xhtml=&quot;http://www.w3.org/1999/xhtml&quot;<br>
&gt; &nbsp; &nbsp; version=&quot;1.0&quot; exclude-result-prefixes=&quot;xhtml
&quot;&gt;<br>
&gt; &nbsp; &nbsp; <br>
&gt; &nbsp; &nbsp; &lt;!-- toolbox for copying everything over to the target
--&gt;<br>
&gt; &nbsp; &nbsp; &lt;xsl:import href=&quot;copyover.xsl&quot;/&gt;<br>
&gt; &nbsp; &nbsp; <br>
&gt; &nbsp; &nbsp; &lt;!-- Match html, disregard the namespace --&gt;<br>
&gt; &nbsp; &nbsp; &lt;xsl:template match=&quot;/*[local-name()='html']&quot;
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &lt;xsl:apply-templates select=&quot;*[local
-name()='body']&quot;/&gt;<br>
&gt; &nbsp; &nbsp; &lt;/xsl:template&gt;<br>
&gt; &nbsp; &nbsp; <br>
&gt; &nbsp; &nbsp; &lt;!-- Match body, disregard namespace --&gt;<br>
&gt; &nbsp; &nbsp; &lt;xsl:template match=&quot;/*[local-name()='html']/*[local
-name()='body']&quot;&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div class=&quot;content&quot;&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;xsl:apply-templates/&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>
&gt; &nbsp; &nbsp; &lt;/xsl:template&gt;<br>
&gt; &nbsp; &nbsp; <br>
<br>
and try to remove xhtml with &nbsp;exclude-result-prefixes then things
turn<br>
around. div will no longer have a namespace attribute while all the<br>
copied element do. Misterious really.<br>
<br>
Best regards,<br>
Ferdinand Soethe<br>
<br>
<br>
</font></tt>
<br>