[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
http://www.saxonica.com/
More information about the talk
mailing list