This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: The longest node in a node set
- From: Dimitre Novatchev <dnovatchev at yahoo dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Thu, 18 Jul 2002 11:25:08 -0700 (PDT)
- Subject: [xsl] Re: The longest node in a node set
- Reply-to: xsl-list at lists dot mulberrytech dot com
--- Antonio Fiol Bonnín <fiol at w3ping dot com> wrote:
> Hello,
>
> I am trying to find an XPath expression that gives me the longest
> element in a node set.
>
> I know how to do that for an attribute. e.g //element[not(@attr <
> following-sibling::element/@attr)]
>
> But how can I do that for the string-length(element).
>
> I tried //element[not(string-length(.) <
> string-length(following-sibling::element))]
>
> But this obviously does not work, because following-sibling::element
> is
> not an element or string, but a node-set.
>
> Any ideas?
>
> (I think this one is for Michael Kay... Am I wrong?)
>
> Thank you very much.
>
>
> Antonio Fiol
Hi Antonio,
Just use -- simply, mechanically -- the maximum() function from FXSL:
Sample source xml:
-----------------
<t>
<e1>abc</e1>
<e2>a</e2>
<e3>abcdef</e3>
<e4>abcd</e4>
<e5>ab</e5>
<e6>abcde</e6>
</t>
Transformation:
--------------
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:myLengthCompare="f:myLengthCompare"
exclude-result-prefixes="xsl myLengthCompare"
>
<xsl:import href="maximum.xsl"/>
<!-- This transformation must be applied to:
testMaximum3.xml
-->
<myLengthCompare:myLengthCompare/>
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:variable name="vFunCompLength"
select="document('')/*/myLengthCompare:*[1]"/>
<xsl:call-template name="maximum">
<xsl:with-param name="pList" select="/*/*"/>
<xsl:with-param name="pCMPFun" select="$vFunCompLength"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="myLengthCompare:*">
<xsl:param name="arg1" select="/.."/>
<xsl:param name="arg2" select="/.."/>
<xsl:if test="string-length($arg1)
>
string-length($arg2)">1</xsl:if>
</xsl:template>
</xsl:stylesheet>
Result:
------
<e3>abcdef</e3>
Hope this helped.
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
__________________________________________________
Do You Yahoo!?
Yahoo! Autos - Get free new car price quotes
http://autos.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list