Re: Interesting : Selecting unique value of an attribute

Subject: Re: Interesting : Selecting unique value of an attribute
From: Oliver Becker <obecker@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 23 Aug 2000 16:00:16 +0200 (MET DST)
Hi Paul,

> If I have, let say, a lot of empty elements "index" with a "entry" 
> attribute, and what I want to print is a sorted list of all the value entry 
> have in the document, but without having twice the same value ?
> 
> <index entry="thing"/> blablabla <index entry="stuff"/> blabla <index 
> entry="this"/>
> bliblabla<index entry="thing"/> bla bli bla<index entry="this"/> bli <index 
> entry="stuff"/>
> <index entry="thing"/>and bla and bli <index entry="stuff"/>
> 
> and I want to get:
> stuff
> thing
> this

Something like this:
Define a key for every @entry of index:

<xsl:key name="paul" match="index" use="@entry" />

Then walk through your index elements and choose only the first of
each group (i.e. each key)
<xsl:for-each select="index[generate-id()=generate-id(key('paul',@entry)[1])]">

now you have unique entries which need to be sorted:
<xsl:sort select="@entry" />

Ok - here you are! Output, and that's all:
<xsl:value-of select="@entry" />

The complete template is
<xsl:template match="paul">
   <xsl:for-each
        select="index[generate-id()=generate-id(key('paul',@entry)[1])]">
      <xsl:sort select="@entry" />
      <xsl:value-of select="@entry" />
      <xsl:text>&#xA;</xsl:text>
   </xsl:for-each>
</xsl:template>

(Assuming your XML snipped is nested in a paul element ;-) )

Salut,
Oliver


/-------------------------------------------------------------------\
|  ob|do        Dipl.Inf. Oliver Becker                             |
|  --+--        E-Mail: obecker@xxxxxxxxxxxxxxxxxxxxxxx             |
|  op|qo        WWW:    http://www.informatik.hu-berlin.de/~obecker |
\-------------------------------------------------------------------/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread