[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] Group on deep equal criterion
Subject: RE: [xsl] Group on deep equal criterion From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 22 Oct 2008 09:48:25 +0100 |
Tough one. If you're not worried about O(n^2) performance, you can start by building a data structure that captures the memberships of the groups by doing <xsl:for-each select="$in"> <xsl:variable name="x" select="."/> <item id="generate-id()"> <xsl:for-each select="$in[deep-equal(., current())]"> <duplicate id="{generate-id()}"/> </xsl:for-each> </item> </xsl:for-each> You can then use conventional grouping to identify the distinct groups (not trivial, but I assume you can solve that one), and use <xsl:key name="gid" match="*" use="generate-id()"/> to get back from the generated ids to the original nodes. If you are worried about O(n^2) performance, but don't want to resort to extensions, then you can try and define a hash function that will give the same result for two nodes if they are deep-equal. You can then modify the above to start by doing value-based grouping on the hash key, and then apply the O(n^2) logic only within each of these groups. A simple but quite effective hash key might be something like concat(count(.//*), string(.)). (Of course this still has O(n^2) performance in the worst case where all the input nodes are deep-equal to each other, but one assumes that case is unlikely). Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Vladimir Nesterovsky [mailto:vladimir@xxxxxxxxxxxxxxxxxxxx] > Sent: 22 October 2008 07:50 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Group on deep equal criterion > > Hello! > > What is the best way to group elements by deep-equal() criterion? > > Thanks. > -- > Vladimir Nesterovsky > http://www.nesterovsky-bros.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Group on deep equal criterion, Vladimir Nesterovsky | Thread | RE: [xsl] Group on deep equal crite, Vladimir Nesterovsky |
[xsl] Group on deep equal criterion, Vladimir Nesterovsky | Date | Re: [xsl] Elements and functions av, Andrew Welch |
Month |