[xsl] problem with whitespace in mixed content (reverse indentation)

Subject: [xsl] problem with whitespace in mixed content (reverse indentation)
From: "Wolfhart Totschnig wolfhart.totschnig@xxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 27 Feb 2015 13:49:17 -0000
Hello,

I have a problem with whitespace in mixed content to which I cannot find the solution. I am hoping that one of you can help me.

Due to imprudent use of indent="yes" on <xsl:output>, the whitespace in the mixed-content elements of my data got messed up. I'll best explain the problem with an example.

The following original data

<text><i>Italicized</i> normal <i>italicized</i> <b>bold</b> <i><b>italicized and bold</b></i>.</text>

now looks like this:

<text>
   <i>Italicized</i> normal <i>italicized</i>
   <b>bold</b>
   <i>
      <b>italicized and bold</b>
   </i>.</text>

I have found out how to avoid the indentation in mixed-content elements in the future, namely by using saxon:suppress-indentation. My question is how I can return the modified data back to its original form, i.e., reverse the indentation. The task can be formulated thus: In <text> elements, whitespace-only text nodes that are situated between two start tags should be eliminated, while whitespace-only text nodes that are situated between an end tag and a start tag should be replaced by a single space. How can that be done?

I know that I can select whitespace-only text nodes with test="matches(.,'^\s+$')". But how can I test whether the preceding tag is a start tag or an end tag?

Thanks in advance for your help!

Wolfhart

Current Thread