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 (here), but since I couldn't find any indication to reversed axes being ordered in the w3c spec for reverse axes in xpath 2.0 (here), 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
--
entia non sunt multiplicanda praeter necessitatem