Thomas J.S.: xsl:param : redefining variable

Beitrag lesen

Hallo,

ich habe folgende Eingangsdaten:

<step>123</step>
<step>foo</step>
<step>bar</step>
<step clear="clear">hehe</step>
<step>bla</step>

Die einzelnen steps gehe ich per <xsl:for-each select=".//slide">... durch. Innerhalb der Schleife möchte ich einem anderen Template die Position (position()) des step's übergeben, der als letztes ein "clear"-Attribut auf "clear" gesetzt hatte, wenn das noch nie der Fall war eine 0. Wie mache ich das am besten?

Die Abfrage würde ich im "anderen Template" machen.
<xsl:variable name="lastSlideID">
 <xsl:for-each select=".//slide[@clear]">
  <xsl:if test="position() = last()">
   <xsl:value-of select="generate-id(.)" />
  </xsl:if>
 </xsl:for-each>
</xsl:variable>

<xsl:template match="/">
 <xsl:for-each select=".//slide">
  <xsl:variable name="p">
   <xsl:if test="generate-id(.) = $lastSlideID">
    <xsl:value-of select="position()" />
   </xsl:if>
  </xsl:variable>
                ...
  <xsl:call-template name="foo">
   <xsl:with-param name="pos" select="$p" />
  </xsl:call-template>
 </xsl:for-each>
</xsl:template>
<xsl:template name="foo">
 <xsl:param name="pos" />
 <xsl:variable name="p">
  xsl:choose
   <xsl:when test="not($pos = '')">
    <xsl:value-of select="$pos" />
   </xsl:when>
   xsl:otherwise0</xsl:otherwise>
  </xsl:choose>
 </xsl:variable>
         ....
        <!-- $p kannst du dann verwenden um den Wert zu nützen-->
</xsl:template>

Grüße
Thomas