Andy(_dot_)Lewis(_at_)emerson(_dot_)com wrote:
This is a new area for me. Need to eliminate duplicates that occur
within sub-groups.
XML Input example:
<?xml version="1.0"?>
<root>
<boxes>
<box_sizes>
<value>square</value>
</box_sizes>
<box_sizes>
<value>square</value>
</box_sizes>
</boxes>
<boxes>
<box_sizes>
<value>round</value>
</box_sizes>
<box_sizes>
<value>square</value>
</box_sizes>
</boxes>
<color1>red</color1>
<color2>blue</color2>
</root>
Desired output:
<?xml version="1.0" encoding="utf-8"?>
<root>
<color1>red</color1>
<boxes>
<box_sizes>
<value>square</value>
</box_sizes>
</boxes>
<boxes>
<box_sizes>
<value>round</value>
<value>square</value>
</box_sizes>
</boxes>
</root>
As you can see, I want to eliminate duplicate occurances of
<box_sizes/value> within the <boxes> group.
Here is a stylesheet sample:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="by-value"
match="box_sizes"
use="concat(generate-id(parent::boxes), '_', value)"/>
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="color1"/>
<xsl:apply-templates select="boxes"/>
</xsl:copy>
</xsl:template>
<xsl:template match="boxes">
<xsl:copy>
<box_sizes>
<xsl:apply-templates select="box_sizes[generate-id() =
generate-id(key('by-value', concat(generate-id(parent::boxes), '_',
value))[1])]/value"/>
</box_sizes>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
--
Martin Honnen
http://JavaScript.FAQTs.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>
--~--