hallo,
ich habe eine xml-datei mit ungefähr folgender struktur:
<htmlfolder>
<htmlfolder>
<isintopnav>
<tppos>1</tppos>
</isintopnav>
</htmlfolder>
<htmlfolder>
<htmlfolder>
<isintopnav>
<tppos>2</tppos>
</isintopnav>
<htmlfolder marker="yes">
</htmlfolder>
</htmlfolder>
</htmlfolder>
</htmlfolder>
man sieht: die <htmlfolder>-elemente können beliebig ineinander verschachtelt sein. manche der <htmlfolder>-elemente haben einen <isintopnav>-kindknoten. genau einer der <htmlfolder>-elemente ist markiert durch ein attribut mit namen "marker" (dessen wert "yes" ist nicht so wichtig, vorhandensein des attributs reicht).
jetzt möchte ich einer variablen den wert vom <tppos>-element aus dem markierten <htmlfolder>-element zuweisen.
problem dabei ist: wenn der markierte <htmlfolder> gar kein <isintopnav>-element hat, soll im baum aufwärts gesucht werden, bis man einen <htmlfolder> mit <isintopnav>-element gefunden hat. dann wird der wert dessen <tppos>-elements der variablen zugewiesen.
findet man jedoch bis zum obersten wurzelknoten kein <isintopnav>-element, soll die variable den wert '-1' bekommen.
meine XSL-lösung sieht so aus:
<xsl:variable name="varttn">
xsl:choose
<xsl:when test="boolean(//*[child::isintopnav]//*[@marker])">
<xsl:for-each select="//*[child::isintopnav]//*[@marker]">
xsl:choose
<xsl:when test="(position() = last())and(last() != 0)">
<xsl:value-of select="isintopnav/tppos" />
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:when>
xsl:otherwise
<xsl:value-of select="'-1'" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
aber leider funktioniert es nicht; der xpath-ausdruck drückt nicht das aus, was ich meine.
hat jemand eine idee, wie man dieses problem lösen kann? bin für alle vorschläge sehr dankbar.
grüße, alex wolff