Subject: RE: [xsl] Finding deepest node From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Fri, 2 Dec 2005 20:41:54 -0000 |
The subject says "deepest" rather than "farthest", so I suspect the meaning is the node with maximum depth. See http://www.dpawson.co.uk/xsl/sect2/N2193.html#d3377e91 for a range of answers. Note that the node in .//node[@a = 'avalue']/@id that is furthest from the context node will also be furthest from the root. The design that seems to me the most elegant is the one using FXSL and higher-order functions. I don't think it can be done in a single XPath expression, even with 2.0; but it can if you assign the initial context node to a variable, in which case it's $start//node[@a = 'avalue']/@id [not(count(ancestor::*) lt $start//node[@a = 'avalue']/@id/count(ancestor::*))] The solution I would probably use in real life is: <xsl:for-each select=".//node[@a = 'avalue']/@id"> <xsl:sort select="count(ancestor::*)" order="descending"/> <xsl:if test="position()=1"> <xsl:sequence select="."/> </xsl:if> </xsl:for-each> It actually depends a little on what you want to happen if there are two nodes both at the maximum depth. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Jon Gorman [mailto:jonathan.gorman@xxxxxxxxx] > Sent: 02 December 2005 20:07 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: [xsl] Finding deepest node > > On 12/2/05, marcus <m-lists@xxxxxxxxxx> wrote: > > I have a structure where I for example need to do the following: > > > > .//node[@a = 'avalue']/@id > > > > If I get multiple hits I only want to select the node that > is farthest > > away from the context node. How would I do this with a > single xpath? Is > > it possible at all? > > > > Well......what do you mean by farthest away? I'm sure it's > probably possible. > > say we had a tree like so > > 1 > 1.1 > 1.2 > 1.2..3 > 2 > 2.1 > 2.1.2 > 3 > 3.1 > 4 > 5 > 5.1 > > (Where 1.1 indicates there is a node one level below the first node of > the top level) > > If the context node is at 1, would the "farthest away" be > 1.2.3, 5, 5.1? > > Ie is it depth or breadth or any? > > There's a couple of techniques, but if it's just linear, ie furthest > sibling away, if there are more preceeding siblings, take first() of > the set of all siblings or if there are more following siblings take > last() of the set of all siblings > > Jon
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Finding deepest node, marcus | Thread | Re: [xsl] Finding deepest node, Jon Gorman |
Re: [xsl] Finding deepest node, marcus | Date | [xsl] How to find out if the preced, Nadia . Swaby |
Month |