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