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
--~------------------------------------------------------------------
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>
--~--