This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: xsl filtering duplicate nodes


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]