ThomasM: XSL ancestor?

Beitrag lesen

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