Altova Mailing List Archives>Archive Index >xsl-list Archive Home >Recent entries >Thread Prev - [xsl] Xpath - Selecting node that matches a min() condition within two attributes [Thread Next] RE: [xsl] Xpath - Selecting node that matches a min() condition within two attributesTo: Date: 5/3/2005 9:14:00 AM > 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 | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
