Вот три XML-дерева
(1)
<?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 id="5">
<section>
<bookmark/> <!-- here's the bookmark-->
<section id="6">
<section id="7">
<section id="8"/>
</section>
</section>
</section>
</section>
</section>
</content>
(2)
<?xml version="1.0" encoding="UTF-8"?>
<content>
<section id="1"/>
<section id="2">
<section id="9">
<section id="10">
<section id="11"/>
</section>
</section>
<section>
<section id="4">
<section id="5"/>
</section>
</section>
<section/>
<bookmark/> <!-- here's the bookmark-->
<section id="6">
<section id="7">
<section id="8"/>
</section>
</section>
</section>
</content>
Желаемый результат в обоих случаях: id 5 .
С XSLT 1.0 и XPath 1.0 я могу получить предка из (1)
<xsl:value-of select="//bookmark/ancestor::*[@id][1]/@id"/>
или предыдущий узел из (2)
<xsl:value-of select="//bookmark/preceding::*[@id][1]/@id"/>
Как мне получить ближайший предок или предшествующий узел с идентификатором из моей закладки?
Мне нужен один xsl: value-of, который соответствует обоим случаям. Спасибо.
EDIT:
Решение также должно охватывать эту структуру. Требуемый идентификатор все еще 5 .
(3) * 1 034 *
<?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/> <!-- here's the bookmark-->
<section id="6">
<section id="7">
<section id="8"/>
</section>
</section>
</section>
</section>
</section>
</content>