This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: adding unique values to a drop-down list
- From: "Thomas B. Passin" <tpassin at mitretek dot org>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Tue, 4 Dec 2001 16:44:09 -0500
- Subject: Re: [xsl] adding unique values to a drop-down list
- References: <F253GQObZc8v3drqrtp0000e503@hotmail.com>
- Reply-to: xsl-list at lists dot mulberrytech dot com
[Katie McNally]
> I have not been able to correctly fill the drop-down with brokers. The
> drop-down must contain the broker name/id combinations listed
alphabetically
> with no duplicates.
>
>
The suggestion you were trying out contained
<xsl:for-each select="Loan[not(.=preceding-sibling::*)
This would prevent unique entries if the items were sorted, but I'm not
clear they are. There is at least one standard way to get a unique list,
using keys - it's in the various FAQs. You have create a key that returns
the items. Then you set a variable equal to what the key returns,,
provided it is the first if there are any duplicates, and then you have a
unique list.
This approach does not depend on any assumptions about the original ordering
of the items.
In this case you want to get a unique list of brokers based on their Id
values. Here is a stylesheet that picks out your unique brokers - you can
modify it to produce the html that you want (I wrapped your example XML in a
"data" element"):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name='brokers' match='Broker' use='Id'/>
<xsl:variable name='items'
select='/data/Loan/BrokerSet/Broker[
generate-id(Id)=generate-id(key("brokers",Id)[1]/Id)]'/>
<xsl:template match="/">
<results>
<xsl:for-each select='$items'><!--This is a unique list -->
<item><xsl:value-of select='Id'/></item>
</xsl:for-each>
</results>
</xsl:template>
</xsl:stylesheet>
Cheers,
Tom P
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list