'Remove duplicate values in child nodes of XML file using XSLT

I have the below xml data and I want remove the duplicate values from this xml.

<Report_Data>
    <Report_Entry>
        <Classifications_group>
            <ClassificationGroupName Descriptor="EEO-1 Job Categories">
            </ClassificationGroupName>
            <ClassificationDescription>Professionals</ClassificationDescription>
        </Classifications_group>
        <Classifications_group>
            <ClassificationGroupName Descriptor="Hartford Job Category">
            </ClassificationGroupName>
            <ClassificationDescription>Other</ClassificationDescription>
        </Classifications_group>
        <Classifications_group>
            <ClassificationGroupName Descriptor="Hartford Job Category">
            </ClassificationGroupName>
            <ClassificationDescription>Other</ClassificationDescription>
        </Classifications_group>
    </Report_Entry>
    <Report_Entry>
        <Classifications_group>
            <ClassificationGroupName Descriptor="EEO-1 Job Categories">
            </ClassificationGroupName>
            <ClassificationDescription>Administrative Support Workers</ClassificationDescription>
        </Classifications_group>
        <Classifications_group>
            <ClassificationGroupName Descriptor="Hartford Job Category">
            </ClassificationGroupName>
            <ClassificationDescription>Other</ClassificationDescription>
        </Classifications_group>
    </Report_Entry>
</Report_Data>

I have used the following XSLT to remove duplicate values.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
     exclude-result-prefixes="xs" version="2.0">
   
    <xsl:variable name="CRLF" select="'&#xA;'"/>
    <xsl:output indent="no" method="text"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="Report_Data">
        <xsl:value-of select="'ClassificationGroupName,ClassificationDescription'"/>
        <xsl:value-of select="$CRLF"/>
        <xsl:for-each select="Report_Entry">
            
            <xsl:for-each-group select="Classifications_group" group-by="concat(ClassificationGroupName/@Descriptor, '|', ClassificationDescription)">

                <xsl:value-of select="ClassificationGroupName/@Descriptor"/> 
                <xsl:value-of select="','"/>
                <xsl:value-of select="ClassificationDescription"/>
                <xsl:value-of select="$CRLF"/>

            </xsl:for-each-group> 
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Output:

ClassificationGroupName,ClassificationDescription
EEO-1 Job Categories,Professionals
Hartford Job Category,Other
EEO-1 Job Categories,Administrative Support Workers
Hartford Job Category,Other

Excepted output:

ClassificationGroupName,ClassificationDescription
EEO-1 Job Categories,Professionals
Hartford Job Category,Other
EEO-1 Job Categories,Administrative Support Workers

With the code that I have written, it removes duplicates only within the Report_Entry. I want to remove if there any other duplicate values with both ClassificationGroupName and ClassificationDescription of Classifications_group in any other Report_Entry as well.

What are the changes do I need to do to get the expected output?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source