This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
returning distinct results
- To: XSL-List at lists dot mulberrytech dot com
- Subject: [xsl] returning distinct results
- From: "Tim" <xsl at cheekymail dot net>
- Date: 30 Aug 2001 11:54:53 -0000
- Reply-To: xsl-list at lists dot mulberrytech dot com
Hi,
I have a list of branches some of which are in the same town. I would
like to generate some html to display just the list of towns in a two
column list. I have the columns working but I can't work out how to
remove duplicate towns.
I am trying to order by town name and see if the previous name matches
the current but the //town[position()-1] returns an empty set.
Any ideas would be great.
Ta,
Tim.
Example XML:
<branches>
<branch>
<name>A branch</name>
<town>Aberdeen</town>
</branch>
<branch>
<name>Another branch</name>
<town>Aberdeen</town>
</branch>
<branch>
<name>Yet Another branch</name>
<town>Bournemouth</town>
</branch>
</branches>
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<xsl:call-template name="alltowns"/>
</xsl:template>
<xsl:template name="alltowns">
<xsl:variable name="t-size" select="count(//town)"/>
<xsl:variable name="half" select="ceiling($t-size div
2)"/>
<table>
<tr>
<td>
<ul>
<xsl:for-each select="//town[position() <=
$half]">
<xsl:if test="position() = 1 | //town
[position()-1]/text() != ./text()">
<li><a><xsl:attribute
name="href">locationDetails.jsp?town=<xsl:value-of
select="."/></xsl:attribute><xsl:value-of select="."/></a></li>
</xsl:if>
</xsl:for-each>
</ul>
</td>
<td>
<ul>
<xsl:for-each select="//town[position() >
$half]">
<li><a><xsl:attribute
name="href">locationDetails.jsp?town=<xsl:value-of
select="."/></xsl:attribute><xsl:value-of select="."/></a></li>
</xsl:for-each>
</ul>
</td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list