You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2004/02/18 18:21:16 UTC
DO NOT REPLY [Bug 10009] -
indentation not working with Node.appendChild()
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10009>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10009
indentation not working with Node.appendChild()
minchau@ca.ibm.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |INVALID
------- Additional Comments From minchau@ca.ibm.com 2004-02-18 17:21 -------
===== THIS WAS POSTED TO xalan-dev@xml.apache.org ON JUNE 24, 2002 ===========
===== BY Henry Zongaro =======================================================
Hi Pavani,
Sorry I didn't follow up on this on xalan-j-users right away. I've
read section 16.1 of XSLT 1.0 ("XML Output Method") [1] a little more
carefully, and there's one passage that I'm a little concerned about; it
reads as follows:
[[
The xml output method should use an algorithm to output additional whitespace
that ensures that the result if whitespace were to be stripped from the
output using the process described in [3.4 Whitespace Stripping] with the set
of \
whitespace-preserving elements consisting of just xsl:text would be the same
when \
additional whitespace is output as when additional whitespace is not output.
]]
If the resulting document (before the effect of indent and
indent-amount) contained a fragment like the following, does the passage
that I've quoted from 16.1 mean that no additional whitespace should be
introduced before the xsl:text end-tag? If so, I believe the current
behaviour of SerializerToXML would meet this requirement, but the change
you're recommending would have to account for this case. Similarly, if
xml:space attributes appeared with the value "preserve".
<!--
There are several of blanks and line-feed characters
between the following tags
-->
<xsl:text xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:text/>
I'm also unsure whether the behaviour with your patch would be
expected for a result like the following, where all blank lines between
the tags contain only linefeed characters.
<abc>
xyz
</abc>
I believe your patch would strip out any linefeed characters that appeared
in element content before any non-whitespace text, and leave alone any
that came after, so producing the following result.
<abc>xyz
</abc>
Thanks,
Henry
========================================================================
I have this to add.
The original input xml document was this
<Inventory_Attributes>
..<Products>
....<Product name="my_product">
......<Version>A</Version>
......<Version>B</Version>
......<Version>C</Version>
....</Product>
..</Products>
</Inventory_Attributes>
I've replaced the leading whitespace (spaces) in your document. Each group
of leading whitespace characters (actually the new line character at
the end of the previous line plus the leading whitespace characters) is
effectively considered to be a <xsl:text> node
and is significant.
Your new element that you append to be a child
of the <Product> node is inserted after the last child node of <Product> and
the last child node is not <Version>C</Version> but the text node that is just
before the closing </Product> tag. So you essentially have this in your DOM
after the extra child is added:
<Inventory_Attributes>
..<Products>
....<Product name="my_product">
......<Version>A</Version>
......<Version>B</Version>
......<Version>C</Version>
....<Version>new_added_version</Version></Product>
..</Products>
</Inventory_Attributes>
During serialization an opening element tag or closing element tag will not be
indented if a text node was serialized just before it, otherwise we are adding
characters to an existing text node and changing it. The only opening or
closing tag that has no text before it is the </Product> tag so the
serializer is free to indent that one thing (I've put semicolons to indicate
the spaces inserted due to indentation being on:
<Inventory_Attributes>
..<Products>
....<Product name="my_product">
......<Version>A</Version>
......<Version>B</Version>
......<Version>C</Version>
....<Version>new_added_version</Version>
;;;;</Product>
..</Products>
</Inventory_Attributes>
Xalan is working correctly. This is not a bug.
Regards,
Brian Minchau