Hallo Seraphina,
Ich habe dabei versucht, mit dem XPath "ancestor" auf eine Lösung zu kommen, doch entweder wende ich das falsch an oder habe einen Fehler in meiner choose-Abfrage... Bin für einen kritischen Blick und Hinweise dankbar!
ancestor ist die Vorfahren-Achse, hier sollte die Vorgänger-Geschwister-Achse preceding-sibling zielführend sein. Zudem wird hier das Element obstitle und nicht das Attribut @obstitle angesprochen.
Damit entsteht das gesuchte Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="test">
<test>
<xsl:for-each select="foo">
<xsl:variable name="tit" select="preceding-sibling::title"/>
<xsl:variable name="obs" select="preceding-sibling::foo[@obstitle][1]/@obstitle"/>
<foo>
<xsl:choose>
<xsl:when test="$obs != ''">
<xsl:value-of select="$obs"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$tit"/>
</xsl:otherwise>
</xsl:choose>
</foo>
</xsl:for-each>
</test>
</xsl:template>
</xsl:stylesheet>
Falls title nochmals vorkommen kann, ist noch etwas Feintuning nötig.
Grüße, Thomas