|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Finding deepest node
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: 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








