[xsl] CSV data in attribute - how to get unique values?

Subject: [xsl] CSV data in attribute - how to get unique values?
From: vesse <vessep@xxxxxxxxx>
Date: Thu, 30 Dec 2010 11:25:03 +0800

I have an XML document that looks roughly like this:
  <toplevel attrib="123">
     <midlevel attrib="453,123">
        <bottomlevel attrib="853,123" name="MyName"/>
        <bottomlevel name="OtherItem"/>

I need to group the bottomlevel items under each unique attribute ID.
Attribute on the lowest level found is the one that's important (
(ancestor-or-self::/@attrib)[last()] ). So in the above example the
output would be

- MyName

Attrib: 123
- MyName
- OtherItem

Attrib: 453
- OtherItem

In the old days the attribute value was not CSV data so I used

<xsl:key name="attribs" match="*" use="@attrib"/>
<xsl:for-each select="*[generate-id()=generate-id(key('attribs', @attrib)[1])]">

to go through the items by the attribute values. This does not of
course produce the wanted output anymore. Is it anyway possible to get
the unique values from the CSV data to work with, and then be also
able to find the bottomlevel items that have the current ID? I'm using
XSLT 1.0 (transformation done in browser). Changing the XML file
structure is out of the question.


Current Thread