hoho, jetzt geht's!
die zweite variante war schon ganz gut; der fehler war das when-element im when element. hab's durch ein if ersetzt.
wen's interessiert:
<xsl:variable name="varttn">
<xsl:for-each select="//*[@marker]">
xsl:choose
<xsl:when test="boolean(ancestor-or-self::*[child::isintopnav])">
<xsl:for-each select="ancestor-or-self::*[child::isintopnav]">
<xsl:if test="position() = last()">
<xsl:value-of select="isintopnav/tppos" />
</xsl:if>
</xsl:for-each>
</xsl:when>
xsl:otherwise
<xsl:value-of select="'-1'" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:variable>
dank an alle beteiligten !]
alex