Re: [xsl] text() vs xs:string serialization (was: Re: [xsl] text extraction)

Subject: Re: [xsl] text() vs xs:string serialization (was: Re: [xsl] text extraction)
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Thu, 12 Oct 2006 15:29:19 +0100
On 10/12/06, James A. Robinson <jim.robinson@xxxxxxxxxxxx> wrote:
Am I correct in my understanding that the reason the stylesheet
below works, separating each item from the <xsl:sequence/> with
a single whitespace character, is due to

http://www.w3.org/TR/xslt-xquery-serialization/#serdm

where a sequence of strings will be padded, but a sequence of
text nodes will not be?

Adjacent text nodes get merged before atomization, resulting in a sequence of length one, so no separator is needed.

It's a subtle difference, for example consider:

<foo>bar</foo>
<foo>bar</foo>

select="foo"

returns "bar bar" because there are two items in the sequence which
get atomized as strings and output with the default separator of a
single space between each item.

select="foo/text()"

returns two text nodes that get merged into a single text node,
resulting in a sequence of length 1:

"barbar"

...so no separator is needed.

See http://www.w3.org/TR/xslt20/#constructing-simple-content

Adjacent text nodes get merged at step 2, the separator is added at step 5.

cheers
andrew

Current Thread