I would do two levels of grouping. First use xsl:for-each to group on some
calculated grouping key that's equal if the nodes are deep-equal
(essentially a hash code). You could use the string value of the nodes as
the hash key, or something more subtle, depending on your data. Then within
each group, compare each item with all the preceding items using deep-equal
to create the refined groups.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Felix Breuer [mailto:felix@xxxxxxxxxx]
> Sent: 29 August 2006 23:58
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Counting Duplicates in XSLT 2.0
>
> Hello everyone!
>
> I have an element with a large number of complex
> child-elements and for each child I want to know how many
> duplicates there are (considering two elements as identical
> iff they are deep-equal). Initially I thought
>
> <for-each-group group-by="."> ...
>
> to be the way to go, but then I noticed in the XSLT 2.0 spec
> that the value of the group-by expression is atomized after
> evaluation. So, how do I go about this task?
>
> Going further:
>
> * How can I remove all the duplicates of a given child element,
> retaining exactly one copy?
> * How can I keep exactly one copy iff the number of identical
> copies is
> odd, and remove all copies iff the number is even?
>
>
> Thanks,
> Felix