RE: [xsl] getting the longest text node

Subject: RE: [xsl] getting the longest text node
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Tue, 11 Mar 2003 23:39:32 -0000
> i have a xml document like this:
> 
> 
> <root>
>   <foo>
>     <apple>a</apple>
>     <orange>oiasd</orange>
>   </foo>
>   <foo>
>     <apple>hellooooo</apple>
>     <orange>test</orange>
>   </foo>
> </root>
> 
> what would be the most performant and best way to get
> the longest text of a apple node, and the longest text
> of a orange node?
> 

Searching for it using head/tail recursion will take linear time, but
may use a lot of memory depending whether the processor implements tail
recursion. Sorting and taking the first will take (n log n) time, which
is almost as good - it may in fact be faster in many cases. A divide and
conquer recursion will also take linear time without the memory
problems.

I would probably go for the sort, as it's easiest to code:

<xsl:for-each select="foo/apple">
  <xsl:sort select="string-length(.)" data-type="number"
order="descending"/>
  <xsl:if test="position()=1"><xsl:value-of select="."/></xsl:if>
</xsl:for-each>

Michael Kay
Software AG
home: Michael.H.Kay@xxxxxxxxxxxx
work: Michael.Kay@xxxxxxxxxxxxxx 


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


Current Thread