That should have been ancestor::div1[1]. pardon the typo.
On Wed, Apr 16, 2014 at 3:21 PM, José Tomás Atria <jtat...@gmail.com> wrote: > let $test := > element div0{ > attribute id { 4 }, > element div1 { > attribute id { 3 }, > element div1 { > attribute id { 2 }, > element para { > attribute id { 1 }, > element child { } > } > } > } > } > > I want to get the "smallest" div1 for a given child. this is, the <div1 > id=2> element. > > As far as I've understood the answers given here, reverse axes are ordered > from the context node, so the expression > > $test//child/ancestor-or-self::div1[1] will get me what i want, while > $test//child/parent() will give me <para id=1> > > Needless to say, my data is not particularly well behaved :) > > Thanks! > > > On Wed, Apr 16, 2014 at 3:16 PM, David Rudel <fwqhg...@gmail.com> wrote: > >> I apologize if I'm being dense, but I don't understand how the nearest >> ancestor can be anything other than the parent. Could you please give >> an example? >> >> I just want to make sure I haven't sent you off with the wrong >> expression for your intended usage. >> >> On Wed, Apr 16, 2014 at 8:48 PM, José Tomás Atria <jtat...@gmail.com> >> wrote: >> > Thank you all for your answers. >> > >> > I was just tryig to determine if $test/ancestor::element()[1] would be >> the >> > correct way of getting the nearest ancestor, as I couldn't find whether >> axes >> > were ordered or not in the xpath specification. >> > >> > Thanks! >> > >> > ps: Parent doesn't apply, because the relevant node is not always the >> > parent, but the first node with a given name. >> > >> > >> > On Wed, Apr 16, 2014 at 2:45 PM, David Rudel <fwqhg...@gmail.com> >> wrote: >> >> >> >> Mr. Atria, >> >> You left out a key element from the answer you got from stack overflow. >> >> >> >> Note that Dimitre's response used a filter expression >> >> (path expression) [predicate] >> >> >> >> not a simple path expression >> >> >> >> The ()s are critical. >> >> >> >> $test//child/ancestor-or-self::test[ last() ] >> >> >> >> is very different from >> >> >> >> ($test//child/ancestor-or-self::test)[ last() ] >> >> >> >> The ancestor axis is a reverse axis, but when the xpath expression is >> >> complete, the sequence of nodes are then put in document order >> >> regardless of what order the last axis had. >> >> >> >> In any event, I don't understand what is wrong with simply >> >> $test/ancestor::element()[1] >> >> >> >> Perhaps I don't understand your question (which is simpler than the >> >> Stack Overflow question you linked to). But if you are just looking >> >> for the nearest ancestor element, then it seems that >> >> $test/ancestor::element()[1] should give it to you. >> > >> > >> > >> > >> > -- >> > entia non sunt multiplicanda praeter necessitatem >> >> >> >> -- >> >> "A false conclusion, once arrived at and widely accepted is not >> dislodged easily, and the less it is understood, the more tenaciously >> it is held." - Cantor's Law of Preservation of Ignorance. >> > > > > -- > entia non sunt multiplicanda praeter necessitatem > -- entia non sunt multiplicanda praeter necessitatem