[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: problem with whitespace in mixed content (reverse

Subject: Re: problem with whitespace in mixed content (reverse indentation)
From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 27 Feb 2015 14:28:30 -0000
Re:  problem with whitespace in mixed content (reverse
Wolfhart Totschnig wolfhart.totschnig@xxxxxxxxxxx wrote:
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?



You are dealing with text nodes in a tree, contained in element nodes, you are not dealing tags.
So you need to translate the conditions to one based on the tree model, I think the condition


> In <text>
> elements, whitespace-only text nodes that are situated between two start
> tags should be eliminated,

can only occur if the text node is the first child of an element node and followed by an element node e.g.

<xsl:template match="text//text()[not(normalize-space())
and . is ../node()[1]
and following-sibling::node()[1][self::*]]"/>


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.