RE: selecting a node without its children

Subject: RE: selecting a node without its children
From: David_Marston@xxxxxxxxx
Date: Thu, 30 Mar 2000 14:54:17 -0500
Scott Zarecor wrote:
> ...Here's what my XML looks like:
> <task>
> <author>Scott Zarecor</author>
> <date>03/27/00</date>
> The text of the task would go here...
> </task>
> Using '<xsl:apply-templates select="text()"/>' and other variations upon
> 'text()'-theme (with Xalan) returns the contents of the child nodes as
> as the text I'm actually after. Any ideas?
> ~Scott

Are you using the 1.0.0 release of Xalan? When the current node is <task>,
<xsl:apply-templates select="text()"/>
should select only the text nodes, including the interstitial ones before
and after <author>.
Mind you, my test had a template with match="*" so I could catch child
elements separately from the text nodes.
This should work equally well with
<xsl:for-each select="text()"/>
if you don't want a separate template and shifting context.

The remark about interstitial text nodes leads to a warning that the design
you seem to be using makes it hard to grab the "text of the task" readily.
If you can change this design, either of the following is better XML
1. Wrap the "text of the task" in a <description> element.
2. Make the text be the only content of <task>, moving author and date to
attributes of <task>.
I'll espouse the principle that content you wish to process should be
isolated as an attribute value or text content that is not intermixed with
children. Right now, the human-language way to express the location of the
task description is: the one text node inside <task> that's not just
whitespace. That gets awkward.
.................David Marston

 XSL-List info and archive:

Current Thread