This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Interesting : Selecting unique value of an attribute
- To: xsl-list at mulberrytech dot com
- Subject: Re: Interesting : Selecting unique value of an attribute
- From: Oliver Becker <obecker at informatik dot hu-berlin dot de>
- Date: Wed, 23 Aug 2000 16:00:16 +0200 (MET DST)
- Reply-To: xsl-list at mulberrytech dot com
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>
</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@informatik.hu-berlin.de |
| op|qo WWW: http://www.informatik.hu-berlin.de/~obecker |
\-------------------------------------------------------------------/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list