Subject: RE: [xsl] Using an index with a sorted list of elements From: "Conal Tuohy" <conalt@xxxxxxxxxxxxxxx> Date: Wed, 19 Mar 2003 20:38:17 +1200 |
Hugh Dixon wrote: > I have a number of elements, similar to <element @value/> > I want to find the element that has the biggest value of "value" less > than a value $upperBound. > Eg > <elements> > <element value = "10"/> > <element value = "80"/> > <element value = "100"/> > <element value = "5"/> > </elements> > > If $upperBound is 85, I want <element value = "80"/> > If $upperBound is 7, I want <element value = "5"/> > > I am trying to do something like: > <xsl:for-each select="element[$upperBound>./@value][1]"> > <xsl:sort data-type="number" select="./@value" > order="descending"/> > <xsl:value-of select="."/> > </xsl:for-each> I tried to test your system, but I noticed for a start that you are using <xsl:value-of select="."> to output the string value of the element which matches, but ... the elements have no string value because they are empty. I'm sure in your real data the elements have content! ;-) Anyway ... a solution: You could select the element you want with a single xpath expression. You want the first element, whose value is less than the upperbound, and whose value is NOT less than the value of the OTHER elements whose values are less than the upperbound. That is to say: element[(@value < $upperBound)][not(@value < ../element[(@value < $upperBound)]/@value)] Or equivalently, using a variable to refer to the bounded set of the nodes < upperBound: <xsl:variable name="bounded" select="element[(@value < $upperBound)]" /> <xsl:copy-of select="$bounded[not(@value < $bounded/@value)][1]" /> Cheers! Con XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Using an index with a sor, bix_xslt | Thread | RE: [xsl] Using an index with a sor, Hugh Dixon |
RE: [xsl] Integrating Multiple Styl, bryan | Date | Re: [xsl] local extremums, Ragulf Pickaxe |
Month |