This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Finding the highest node value
- To: xsl-list at lists dot mulberrytech dot com
- Subject: Re: [xsl] Finding the highest node value
- From: Tim Waugh <twaugh at redhat dot com>
- Date: Thu, 25 Oct 2001 16:49:03 +0100
- References: <001901c15d68$ddcf3210$df0410ac@latitude223>
- Reply-To: xsl-list at lists dot mulberrytech dot com
On Thu, Oct 25, 2001 at 05:22:32PM +0200, Antoine Quint wrote:
> Say I have an XML fragment going like this:
>
> =====================
>
> <population unit="million">
> <country>
> <name>China</name>
> <population>1273</population>
> <continent key="2"/>
> </country>
> <!-- some more <country> -->
> <country>
> <name>India</name>
> <population>1033</population>
> <continent key="2"/>
> </country>
> </population>
>
> =====================
>
> What I would like to do is store in a <xsl:variable> the highest
> <population> value?
>
> How would one go around this?
Here's one way to do it:
<xsl:template name="find-max">
<xsl:param name="nodeset"/>
<xsl:param name="max"/>
<xsl:choose>
<xsl:when test="count($nodeset)=0">
<xsl:value-of select="$max"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="find-max">
<xsl:with-param name="nodeset">
<xsl:value-of select="$nodeset"/>
</xsl:with-param>
<xsl:with-param name="max">
<xsl:value-of select="$max"/>
</xsl:with-param>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="population">
<xsl:variable name="maxpopulation">
<xsl:call-template name="find-max">
<xsl:with-param name="nodeset"
select="country/population[position()>1]"/>
<xsl:with-param name="max" select="number(country/population[1])"/>
</xsl:call-template>
</xsl:variable>
</xsl:template>
Tim.
*/
PGP signature