[xquery-talk] Function and Query Evaluation with No XML Tags Error

Michael Kay mike at saxonica.com
Fri Feb 29 09:08:28 PST 2008

> >
> >  declare function local:unique-nodes-by-value($seq as 
> element()*) as 
> > element()*  {
> >   for $r in $seq[not(string(.)=string((preceding-sibling::*)[1]))]
> I think this test is broken if the data (e.g. sequence being 
> testing) is not sorted.  I need to compare that string(.) is 
> not equal to ANY of the preceding-siblings (not just the 
> first one).  I don't know yet how to do this (and I can't 
> look at it now...)

Assuming that the typed value is the same as the string value, you can write

$seq[not(. = preceding-sibling::*)]

If you really need the string value, it's

$seq[not(./string() = preceding-sibling::*/string())]

But using distinct-values() is likely to be a lot more efficient.

Michael Kay

More information about the talk mailing list