Re: [xsl] Removing all line breaks in text nodes

Subject: Re: [xsl] Removing all line breaks in text nodes
From: Abel Braaksma <abel.online@xxxxxxxxx>
Date: Mon, 11 Sep 2006 11:10:28 +0200
Hi Mark,

Your examples are all broken up into several lines, I expect this is due to the mail server. Let me repeat to clarify and test if I understand you correctly:

-- FrameMaker:
<p>Some line
breaks in this
text on certain
defined widths</p>

-- You're required output (one line):
<p>Some line breaks in this text on certain defined widths</p>

Is that correct?

In that case it should be sufficient to use:
<xsl-template match="text()" />
   <xsl:value-of select="normalize-space(.)" />
</xsl-template>

This is different from

match="text()[normalize-space(.)='']"

which will only select text nodes that are empty or filled with whitespace only.

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


Mark Peters wrote:
Hi,

When Adobe FrameMaker saves documents as XML files, it seems to break
lines at a defined width.

For example:

<p>This sample text node illustrates how FrameMaker introduces
line breaks at pre-defined widths. If this were a real piece of content,
it would contain interesting or useful information. However it's just an
example paragraph. I'll add one more line here for good measure, and
will then simply quit.</p>

I'd like to remove all line breaks using XSLT 1.0, if possible. The
resulting XML would look like the following:

<p>This sample text node illustrates how FrameMaker introduces line
breaks at pre-defined widths. If this were a real piece of content, it
would contain interesting or useful information. However it's just an
example paragraph. I'll add one more line here for good measure, and
will then simply quit.</p>

I've tried several normalizing templates from Dave Pawson's site
(http://www.dpawson.co.uk/xsl/sect2/normalise.html), such as the
following:

<xsl:template match="*">
<xsl:param name="indent" select="'&#xA;'"/>
<xsl:value-of select="$indent"/>
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates>
<xsl:with-param name="indent" select="concat($indent, $indent-increment)"/>
</xsl:apply-templates>
<xsl:if test="*">
<xsl:value-of select="$indent"/>
</xsl:if>
</xsl:copy>
</xsl:template>
<xsl:template match="comment()|processing-instruction()">
<xsl:copy/>
</xsl:template>


- and -

<xsl:template match="text()[normalize-space(.)='']"/>

I've also tried removing the line breaks using XMLTidy, without success.

I'd appreciate any suggestions.

Thanks.

Mark Peters
Senior Technical Writer
Saba Software

Current Thread