This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Finding the highest node value


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()&gt;1]"/>
   <xsl:with-param name="max" select="number(country/population[1])"/>
  </xsl:call-template>
 </xsl:variable>
</xsl:template>

Tim.
*/

PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]