Hello all,
I've been looking for an authoritative answer to this, but have been unable to find one.
I'm trying to reliably get the nearest ancestor of a node. ie with this test data:
let $test := element test { attribute id { 4 }, element test { attribute id { 3 }, element test { attribute id { 2 }, element test { attribute id { 1 }, element child { } } } } }
i want an expression that will return node test/@id=1 from child.
Stackoverflow says that this:
$test//child/ancestor-or-self::test[ last() ]
Should work (herehttp://stackoverflow.com/questions/6554488/how-to-get-the-nearest-ancestor-or-child-of-an-ancestor-with-xpath), but since I couldn't find any indication to reversed axes being ordered in the w3c spec for reverse axes in xpath 2.0 (herehttp://www.w3.org/TR/xpath20/#doc-xpath-ReverseAxis), I suspected that this would be implementation dependent, and sure enough, in BaseX, that expression returns
<test id="4"> <test id="3"> <test id="2"> <test id="1"> <child/> </test> </test> </test> </test>
while this
$test//child/ancestor-or-self::test[ 1 ]
correctly returns
<test id="1"> <child/> </test>
Is there an authoritative way of getting the nearest ancestor of a given node? Note that in my actual use case, names are the same, and desired ids are unknown.
Thanks!
jta