Subject: RE: 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
|