xsl-list
[Top] [All Lists]

Re: [xsl] How to extract data from an element and not from its children

2006-12-06 09:55:13
On 12/6/06, CMS <cms(_at_)twindesign(_dot_)nl> wrote:
Hi,

I can't find a way to solve this problem:

How do I extract the value of an element, without text in its children. E.g.
how do I extract from the next example the line 'This text is some test .'.

<text>This text is some test <emph>text</emph>.</text>

I think I am overlooking a simple function, but can't seem to find it.

The crucial thing to grasp here is that <text> contains the text node
"This text is some test ", the element <emph> and then another text
node "."

When you do value-of on <text> you get the text nodes of the element
and all its children concatenated together, so you would get the text
node child of <emph> - which isnt what you want.

When you do value-of select="text()" on <text> to only get the text
node children you get a sequence of two items - the two text nodes.
In 1.0 when you have a list of more than one item the first is used
and the rest discarded (to allow functions that expect a single item
to not fail if a list is supplied - XSLT 1.0 was designed to always
produce some output).

What all this means is that in 1.0 you can do either:

<xsl:for-each select="text()">
 <xsl:value-of select="."/>
</xsl:for-each>

or

<xsl:apply-templates select="text()"/>

Either technique will process each text node in turn.

In 2.0 all the items in the sequence get concatenated together using a
separator (if one's not supplied the default of a single space is
used), so a simple value-of select="text()" does the job.

cheers
andrew

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--