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

Subject: RE: [xsl] XPath: better way to check for text nodes that aren't descendents of x or y nodes?
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Wed, 14 May 2003 19:14:12 +0100
> My requirement is to check for validity of certain XML data 
> as follows: all text() nodes descended from . must be 
> descendants of either llcd:vernac or llcd:gloss. (By the way, 
> if it helps, the llcd:vernac or llcd:gloss will be 
> descendants of . too, not ancestors.)
> 
> My current test is 
>  test=".//text()[not(ancestor::llcd:vernac | ancestor::llcd:gloss)]"
> 
> If this test is true, the data is invalid.
> 
> But is there a more efficient way to do this?

You could try

count(.//text()) = count(.//llcd:vernac//text() | .//llcd:glos//text())

Michael Kay


> 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".
> 
> I guess I could do
>  test="count(.//text()) >
>        count(.//llcd:vernac//text() | .//llcd:gloss//text())" 
> but I'm not sure that's any more efficient.
> 
> This is not a big deal, just wanting to be as efficient as 
> reasonably possible.
> 
> Lars
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


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


Current Thread