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

Re: Testing for following text()

Subject: Re: Testing for following text()
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Wed, 31 Oct 2007 13:20:44 -0400
Re:  Testing for following text()
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@xxxxxxxxxxxxxxxxxxxx
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

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.