[XML4Lib] Problem with sorting and de-duplication in XSLT
Conal Tuohy
Conal.Tuohy at vuw.ac.nz
Wed Mar 21 18:56:00 EST 2007
Hi Melanie
You need to use normalize-space() both in the grouping expression AND in
the key, in order for the de-duplication to work.
You need to select ALL the orgName elements in the document and apply
templates to all those elements under the control of an xsl:sort, and
that sort order has to use normalize-space() as well.
Cheers!
Con
Try this:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<!--The first two templates are just to make sure the initial
matching is working-->
<xsl:template match="/">
<foundRoot>
<xsl:apply-templates/>
</foundRoot>
</xsl:template>
<xsl:template match="text">
<foundText>
<xsl:apply-templates select=".//orgName">
<xsl:sort select="normalize-space()"/>
</xsl:apply-templates>
</foundText>
</xsl:template>
<xsl:key name="orgName" match="orgName" use="normalize-space()"
/>
<xsl:template match="orgName[count(. | key('orgName',
normalize-space())[1]) = 1]">
<Organization>
<xsl:value-of select="normalize-space()" />
</Organization>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
More information about the XML4Lib
mailing list