Subject: RE: [xsl] First Element in Sorted List From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 2 Jun 2005 04:07:17 +0100 |
> My process needs to take action on the first element in a list of > elements where the logic to determine first is the lowest > numeric value > of the sortorder attribute. I don't believe there is a > one-line way to > do this - I believe the entire list must be sorted, and then the > position of each element after sort compared to determine if > it is first. Yes. Even in XSLT 2.0 this may be the best approach. 2.0 offers min/max functions, but they give you the highest/lowest value, not the node having that value. Writing a recursive template/function might give you better performance than sorting (linear rather than n*log(n)). There is a one-line solution: $x[not($x/@sortorder < @sortorder)] but it's quite likely to have poor (quadratic) performance. You could consider using EXSLT math:highest() or math:lowest(). Or I'm sure there's something in Dimitre's box of tricks called FXSL. Michael Kay http://www.saxonica.com/ > > Is there a shorter/less expensive way to code the following > > <xsl:for-each select="item"> > <xsl:sort select="@sortorder" data-type="number" /> > <xsl:if test="position() = 1"> > <!-- this is the first element in the sorted list --> > </xsl:if> > </xsl:for-each> > > I searched and found examples using this technique, but > nothing really > saying that this was the best or only approach. > > Thanks in advance, > > -John
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] First Element in Sorted L, David Carlisle | Thread | RE: [xsl] Keys (easy one) match on , Andrew Welch |
RE: [xsl] key() function issue, Michael Kay | Date | RE: [xsl] Convert html:br to paragr, Michael Kay |
Month |