Hi Nicolas,
This is a grouping problem. The following XSL is one
possible solution -
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes"/>
<xsl:key name="x" match="foo"
use="concat(@name,'+',@version)"/>
<xsl:template match="/root">
<root>
<xsl:for-each select="foo">
<xsl:if test="generate-id(.) =
generate-id(key('x', concat(@name,'+',@version))[1])">
<xsl:copy-of select="." />
</xsl:if>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
When the above XSL is applied to the XML -
<?xml version="1.0" encoding="UTF-8"?>
<root>
<foo name="a" version="1"/>
<foo name="b" version="1"/>
<foo name="a" version="1"/>
<foo name="b" version="2"/>
<foo name="c" version="1"/>
<foo name="b" version="1"/>
<foo name="b" version="1"/>
</root>
, the output received is -
<?xml version="1.0" encoding="UTF-8"?>
<root>
<foo name="a" version="1" />
<foo name="b" version="1" />
<foo name="b" version="2" />
<foo name="c" version="1" />
</root>
Regards,
Mukul
--- Nicolas Mailhot <Nicolas(_dot_)Mailhot(_at_)laPoste(_dot_)net>
wrote: > Hi,
I find that very often I end up with lists of
elements like:
<foo name="a" version="1"/>
<foo name="b" version="1"/>
<foo name="a" version="1"/>
<foo name="b" version="2"/>
<foo name="c" version="1"/>
<foo name="b" version="1"/>
<foo name="b" version="1"/>
Which I need to trim, keeping only the first
element with an unique
attibute value, or unique attribute values. For
example, if I only
wanted the first element with an unique name,version
pair this would
give :
<foo name="a" version="1"/>
<foo name="b" version="1"/>
<foo name="b" version="2"/>
<foo name="c" version="1"/>
Is there a clean way to do it ?
<xsl:template match="foo[(_at_)name=(_dot_)/@name and
@version=./@version][1]">
only matches the first
<foo name="a" version="1"/>
Cheers,
--
Nicolas Mailhot
ATTACHMENT part 2 application/pgp-signature
name=signature.asc
________________________________________________________________________
Yahoo! India Matrimony: Find your partner online.
http://yahoo.shaadi.com/india-matrimony/