I'm trying to select the right node from a nodeset that might
match the
following condition :
Select node, such as (@X1 - @Size) is the smallest.
Here a sample XML :
<Nodeset>
<Node number="1" X1="600" size="300"/>
<Node number="2" X1="500" size="300"/>
<Node number="3" X1="400" size="220"/>
<Node number="4" X1="300" size="299"/>
<Node number="5" X1="200" size="20"/>
</Nodeset>
Here, it should select node @number = 4
Your example uses the min() function so I assume you are using XSLT 2.0.
In fact min() gives you the smallest of a set of values (e.g. numbers), not
the node that has that value. It's not working in your example because you
are applying it to a single value, not to a collection.
So you want:
<xsl:variable name="nodes" select="Nodeset/Node"/>
<xsl:variable name="minX_ID" select="$nodes[min($nodes/(@X1 - @Size)) = (@X1
- @Size)]"/>
It's probably as easy to use the 1.0 technique which is to sort the nodes
and take the first:
<xsl:variable name="sorted-nodes" as="element()*">
<xsl:perform-sort select="Nodeset/Node">
<xsl:sort select="@X1 - @Size"/>
</xsl:perform-sort>
</xsl:variable>
<xsl:variable name="minX_ID" select="$sorted-nodes[1]"/>
Michael Kay
http://www.saxonica.com/
Here the XSL code I used, but seems not to be correct :
<xsl:variable name="minX_ID" select="Nodeset/Node[min(@X1 -
@Size)]/@number"/>
Thanks for your help
Lawrence
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--