xsl-list
[Top] [All Lists]

RE: [xsl] Counting Duplicates in XSLT 2.0

2006-08-30 05:50:53
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(_at_)fbreuer(_dot_)de] 
Sent: 29 August 2006 23:58
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>