This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: xsl filtering duplicate nodes
- To: Tom Melkonian <melkonian at entelos dot com>
- Subject: Re: [xsl] xsl filtering duplicate nodes
- From: Jeni Tennison <mail at jenitennison dot com>
- Date: Thu, 29 Mar 2001 14:16:30 +0100
- CC: "'xsl-list at lists dot mulberrytech dot com'" <xsl-list at lists dot mulberrytech dot com>
- Organization: Jeni Tennison Consulting Ltd
- References: <F8F3E22A3C207348A963006D534282162E1185@hippocrates.entelos.com>
- Reply-To: xsl-list at lists dot mulberrytech dot com
Hi Tom,
> I need to filter out only those nodes which have identical @id and
> @found attributes
One method would be to process all the Reference elements, but within
the template or xsl:for-each test whether there was a preceding
sibling with the same @id and @found as the current one, and only
process the element if there isn't:
<xsl:if test="not(preceding-sibling::Reference
[@id = current()/@id and
@found = current()/@found])">
...
</xsl:if>
The other way is to use the Muenchian method and create a key that
indexes the Reference elements based on their @id *and* @found, by
concatenating the two values together:
<xsl:key name="Reference-by-id-and-found"
match="Reference"
use="concat(@id, ':', @found)" />
You can then use:
Reference[count(.|key('Reference-by-id-and-found',
concat(@id, ':', @found))[1]) = 1]
to get the unique Reference elements. My reply to your earlier email
explained how this worked, so I won't repeat it.
I hope that helps,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list