xsl-list
[Top] [All Lists]

RE: XPath: better way to check for text nodes that aren't descendents of x or y nodes?

2003-05-14 10:20:07
[ Lars Huttar]

But is there a more efficient way to do this?
Something that checks for llcd:vernac|llcd:gloss along the way,
instead of going down the descendant axis and then back up the
ancestor axis (twice)?  Something along the lines of
  test="./(not(llcd:vernac|llcd:gloss)/)*/text()"
where * means "0 or more times".


You could use

test='not(.//*[local-name() != "vernac" and local-name() !=
"gloss"]/text()[1]
                | text())'

or

test='count(.//*[local-name() != "vernac" and local-name() !=
"gloss"]/text()[1]
                | text()) > 0'

These might be more efficient because you do not bother to examine
elements that will not cause a false result, and of the ones that are
examined, you only have to look at one text node.

Whatever expression you use, remember to use 

<xsl:strip-space elements='*'/>

Otherwise you will be counting whitespace-only nodes between elements,
which you most likely do not intend.

Cheers,

Tom P

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list