Re: [xsl] Removing duplicates based on set of identifiers

Subject: Re: [xsl] Removing duplicates based on set of identifiers
From: George Cristian Bina <george@xxxxxxxxxxxxx>
Date: Mon, 15 Sep 2008 11:31:42 +0300
Hi,

You can use xs:for-each-group. For example if you join the tag ids as the grouping key then you will get a stylesheet like below:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:template match="doc">
<xsl:for-each-group select="odo" group-by="string-join(tag/@id, '-')">
<xsl:copy-of select="."/>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>


Best Regards,
George
--
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com

Kolda, Marcin wrote:
Hi,

I have problem with removing group duplicates. I want to remove duplicates, which contains childs with identical ids.
I'm looking for solution that does that using XSLT 2.0. Example of input and output is below.

Input:
<doc>
            <odo>
                        <tag id="1"/>
                        <tag id="2"/>
                        <tag id="3"/>
            </odo>
            <odo>
                        <tag id="1"/>
                        <tag id="3"/>
            </odo>
            <odo>
                        <tag id="2"/>
                        <tag id="3"/>
            </odo>
            <odo>
                        <tag id="1"/>
                        <tag id="2"/>
                        <tag id="3"/>
            </odo>
            <odo>
                        <tag id="1"/>
                        <tag id="3"/>
            </odo>
            <odo>
                        <tag id="3"/>
            </odo>
</doc>

Output:
<doc>
            <odo>
                        <tag id="1"/>
                        <tag id="2"/>
                        <tag id="3"/>
            </odo>
            <odo>
                        <tag id="1"/>
                        <tag id="3"/>
            </odo>
            <odo>
                        <tag id="2"/>
                        <tag id="3"/>
            </odo>
            <odo>
                        <tag id="3"/>
            </odo>
</doc>

Do you have any ideas?

Marcin

Current Thread