Re: [xsl] XSLT engines and terminal newline

Subject: Re: [xsl] XSLT engines and terminal newline
From: Abel Braaksma <abel.online@xxxxxxxxx>
Date: Tue, 19 Sep 2006 18:26:28 +0200
Hi Michael(tm)

The diff-like programs I tend to use ignore whitespace differences, or have at least an option to ignore them. But if that isn't an option for you, I can only think of the following (not sure it helps you though):

<xsl:if test="contains(system-property('xsl:vendor'), 'SAXON 6.5')">
   <xsl:text>&#x0A;</xsl:text>
</xsl:if>

You can call that whenever you are supposed to enter the final newline.

Cheers,
Abel Braaksma
http://abelleba.metacarpus.com

Michael(tm) Smith wrote:
When I do an XSLT transformation with xsltproc, the output is
always newline-terminated (final byte is a newline character).
When I do the same transformation with Saxon 6.5, the output is
not newline-terminated.

For most purposes the difference doesn't matter. But to diff and
some other text-processing tools, it does (diff considers any line
that doesn't end with a newline to be an "incomplete line"; it
goes ahead processes such a line as if they did end in a newline,
but emits a "No newline at end of file" message in the diff).

I know I can make changes within my stylesheet to ensure that the
terminal newline gets added to the Saxon output, but the problem
is that if I then use the same stylesheet with xsltproc, I end up
with two newlines at the end of the file (and so an unnecessary
blank line at the end). I also know that for the case of XML
output, I can do a postprocessing step to run it through a tool
that produces canonical XML -- which will ensure that it ends with
single newline -- but that does me no good for HTML output.

Has anybody else run into this issue? Any suggestions about how to
deal with it?

--Mike

Current Thread