At 2007-10-31 17:59 +0100, Sascha Mantscheff wrote:
How can I test if there is a text node following and restrict the test
to a certain parent element?
By comparing ancestors.
In the example I'd like to test if there is text following after the
<s/> element up to the enclosing end tag of the <b> element.
So, then, this <b> ancestor has to be common between the node you are
at, and the nodes being inspected for being non-empty.
This test should fire at the first s element because of the following
BBB text, but not at the second s element in spite of the following AAA
text.
The structure below the b element may contain any number of nesting
levels and element.
Which is why one is dealing with the ancestor.
I'd like to include the test in a template which tackles the s element,
like <xsl:template match="s[some-test]">
The solution below addresses this, by first filtering following text
nodes for having the common ancestor, and then filtering those for
being non-white-space-only.
It is using XSLT 1.0 ... you don't say which version you are using.
Note that on large data sets this may be slow because of the use of
the following:: axis.
I hope this helps.
. . . . . . . . . . Ken
t:\ftemp>type sascha.xml
<a>
aaa
<b>
bbb
<c>
ccc
<s/>
</c>
BBB
</b>
AAA
<b>
bbb
<c>
ccc
<s/>
</c>
</b>
AAA
</a>
t:\ftemp>type sasha.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="//s">
<xsl:value-of select="position()"/>: <xsl:text/>
<xsl:choose>
<xsl:when test="following::text()[generate-id(ancestor::b[1])=
generate-id(current()/ancestor::b[1])]
[normalize-space()]">yes</xsl:when>
<xsl:otherwise>no</xsl:otherwise>
</xsl:choose>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
t:\ftemp>xslt sascha.xml sasha.xsl con
1: yes
2: no
t:\ftemp>
--
Comprehensive in-depth XSLT2/XSL-FO1.1 classes: Austin TX,Jan-2008
World-wide corporate, govt. & user group XML, XSL and UBL training
RSS feeds: publicly-available developer resources and training
G. Ken Holman mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (F:-0995)
Male Cancer Awareness Jul'07 http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers: http://www.CraneSoftwrights.com/legal
--~------------------------------------------------------------------
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>
--~--