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 11:14:12
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