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(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list