|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Removing duplicates where duplicates are determine
I think you just want to use for-each-group
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="persons">
<xsl:copy>
<xsl:for-each-group select="person" group-by="concat(surname,':',first_name)">
<xsl:text> </xsl:text>
<xsl:copy-of select="."/>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
saxon9 per.xml per.xsl
<?xml version="1.0" encoding="UTF-8"?><persons>
<person>
<surname>Per</surname><first_name>Hansen</first_name>
</person>
<person>
<surname>Per</surname><first_name>Olsen</first_name>
</person>
<person>
<surname>Jan</surname><first_name>Hansen</first_name>
</person>
<person>
<surname>Ole</surname><first_name>Pedersen</first_name>
</person>
<person>
<surname>jan</surname><first_name>Fredriksen</first_name>
</person>
<person>
<surname>Arne</surname><first_name>Jensen</first_name>
</person></persons>
If you are making variables you normally don't want to do
<xsl:variable name="persons">
<xsl:for-each select="//person">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:variable>
which is very expensive (// causes a search of the entire document, and
<xsl:copy-of causes all the elements to be copied
You could use
<xsl:variable name="persons" select="persons/person"/>
to seelct the original elements, not copies.
David
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








