Re: Getting a longest node

Subject: Re: Getting a longest node
From: Phil Lanch <phil@xxxxxxxxxxxxxxx>
Date: Mon, 17 Jan 2000 17:02:58 +0000
Wendell Piez wrote:
> 
> Esteemed XSLers:
> 
> Does anyone know a way I could define a variable that would contain the
> number of characters in the longest node in a node-set? Let the node set in
> question be //DIV[@type='Chapter']: if I have three, with string lengths
> 88888, 99999, and 111110, I want my variable to be 111110.
> 
> I tried iterating over the node set and resetting a variable if it passes
> the greater-than test --
> 
> <xsl:template name="getlongest">
>   <xsl:param name="nodeset"/>
>   <xsl:param name="longest" select="0">
>   <xsl:for-each select="$nodeset">
>     <xsl:if test="string-length(.) &gt; $longest">
>       <xsl:variable name="longest" select="string-length(.)">
>     </xsl:if>
>   </xsl:for-each>
>   <xsl:value-of select="$longest"/>
> </xsl:template>
> 
> But of course since the reset variable is only scoped within the
> xsl:for-each, all I get back is zero. :->
> I think I know I have to do this with some kind of recursion, but I can't

Yeah, that's it.

<xsl:template name="getlongest">
  <xsl:param name="nodeset"/>
  <xsl:param name="longest" select="0">
  <xsl:choose>
    <xsl:when test="$nodeset">
      <xsl:choose>
        <xsl:when test="string-length($nodeset[1]) &gt; $longest">
          <xsl:call-template name="getlongest">
            <xsl:with-param name="nodeset" select="$nodeset[position()
&gt; 1]"/>
            <xsl:with-param name="longest"
select="string-length($nodeset[1])"/>
          </xsl:call-template>
        <xsl:when>
        <xsl:otherwise>
          <xsl:call-template name="getlongest">
            <xsl:with-param name="nodeset" select="$nodeset[position()
&gt; 1]"/>
            <xsl:with-param name="longest" select="$longest"/>
          </xsl:call-template>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$longest"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

-- 

cheers

phil

"When they bring me fear soup to eat,
I try not to eat it, I try to send it back.
But sometimes I'm too afraid to and have to eat it anyway."


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread