Look at <bookmark/>
. The desired output I want is the id with value 5
<xsl:value-of select="//bookmark/ancestor::*[@id][1]/@id"/>
only gives me 4
<?xml version="1.0" encoding="UTF-8"?>
<content>
<section id="1">
<section id="2"/>
<section id="3"/>
<section id="9"/>
</section>
<section id="4">
<section>
<section id="10"/>
<section id="5"/>
<section>
<bookmark/>
<section id="6">
<section id="7">
<section id="8"/>
</section>
</section>
</section>
</section>
</section>
</content>
section[@id=5]
is not an ancestor of <bookmark>
, but it is preceding it.
The ancestor axis contains the ancestors of the context node; the ancestors of the context node consist of the parent of context node and the parent's parent and so on; thus, the ancestor axis will always include the root node, unless the context node is the root node
The preceding axis contains all nodes in the same document as the context node that are before the context node in document order, excluding any ancestors and excluding attribute nodes and namespace nodes
Change ancestor::
to preceding::
:
//bookmark/preceding::*[@id][1]/@id