Re: [xsl] White space treatment issue

Subject: Re: [xsl] White space treatment issue
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Tue, 18 Jan 2011 09:00:58 +0000
On 18/01/2011 08:23, Karl Stubsjoen wrote:
Thanks for the pointers.  I have created a sample xml and xslt so you
can run yourself.  I get 2 different results on the lines in the
stylesheet with<fo:inline>testing</fo:inline>

In a block with linefeed-treatment set to "preserve".

Saxon collapses the lines following each<fo:inline>  so that you end up with:

MvpXslTransform preserves the lines so you get:
You haven't answered the first question: what is the output of the XSLT in each case? I think you're showing the output of the XSL-FO processor.

This feels to me like a problem at the XSL-FO stage of the pipeline rather than the XSLT stage.

Michael Kay
I kinda think, but I don't know the standards to a high degree that
the latter would be the expected result, but that is for you all to
chime in on!  Anyhow, here is the xml and the xslt.

Thanks for looking at this.  And by the way the goal is still:  using
MvpXslTranform achieve the same results as Saxon (right or wrong).

             <line1>222 Poplar</line1>
             <line2>Apt #92</line2>
             <line3>Dreamy Draw, AZ 85028</line3>

<xsl:template match="/"> <fo:root> <fo:layout-master-set> <fo:simple-page-master master-name="master"> <fo:region-body></fo:region-body> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="master"> <fo:flow flow-name="xsl-region-body"> <fo:block-container position="absolute" left=".25in" top="1in"> <fo:block> <xsl:value-of select="root/client/name"/> </fo:block> </fo:block-container> <fo:block-container position="absolute" left=".35in" top="1.25in"> <xsl:apply-templates select="root/client/address/*"/> </fo:block-container> <fo:block-container position="absolute" left="1.25in" top="1.85in"> <fo:block linefeed-treatment="preserve"> <fo:inline>testing</fo:inline> <fo:inline>testing</fo:inline> <fo:inline>testing</fo:inline> <fo:inline>testing</fo:inline> </fo:block> </fo:block-container> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template>

<xsl:template match="address/*">
     <fo:block><xsl:value-of select="."/></fo:block>

On Mon, Jan 17, 2011 at 5:11 PM, Michael Kay<mike@xxxxxxxxxxxx> wrote:
On 17/01/2011 23:20, Karl Stubsjoen wrote:
I can't figure out where/when white space is getting introduced, and
if it is introduced in the stylesheet or the xml document or I guess
maybe both.
I am using MvpXslTransform in a C# .NET application.
When I run the transformation straight with Saxon there is no issue.
When I run the same thing with MvpXslTransform, I get extra spaces in
the output.  There is linefeed-treatment set to true in the fo
document, but somehow extra lines are injected.
First, eliminate XSL-FO from the equation. Is the XSLT output different from
the two processors?

Unwanted whitespace in XSLT output comes from one of three places:

(a) whitespace being copied from the source document

(b) whitespace copied from the stylesheet

(c) indentation added by the serializer

First see what the extra whitespace looks like. Is it adjacent to
non-whitespace text. If so, where does that text come from? Is it in mixed
content elements or in element-only content? Does it include newline
characters? Is it the entire content of an element? This information will
often lead you to identify one of the three causes above as the most likely.

The fact that you're getting different output from different processors is
another clue. It tends to suggest a difference in parsing or serialization
behaviour rather than in the transformation proper.

Michael Kay

Current Thread