fleedo: Bei Rekursion in XSLT keine Parameterübergabe.

Hallo @all,

Folgende XML-Datei soll per XSL transformiert werden.

  
<gle>  
     <gl>...</gl>  
     <gl>  
         <gl>  
              <gl>...</gl>  
         </gl>  
     </gl>  
<gle>  

Ich brauche nun einen rekursiven Code, der mir die Ebene der Verschachtelung zählt. Ich befinde mich gerade im Knoten <gle>. Mein Entwurf:

  
<xsl:template match="gl">  
  <xsl:param name="recCount" select="0"/>  
  <!-- Prüfe ob gleichartiges Kind existiert -->  
  <xsl:if test="child::gl">  
     <xsl:apply-templates select="child::gl">  
         <xsl:with-param name="recCount" select="recCount + 1"/>  
     </xsl:apply-templates>  
  </xsl:if>  
</xsl:template>  

Mein Debugger sagt mir, dass der Parameter bei jedem neu gefunden Match von gl wieder 0 ist. Es wird also nicht hochgezählt. Wisst ihr, wo hier mein Denkfehler liegt?

Danke und Gruß
Robert

  1. Hi,

    Mein Debugger sagt mir, dass der Parameter bei jedem neu gefunden Match von gl wieder 0 ist. Es wird also nicht hochgezählt. Wisst ihr, wo hier mein Denkfehler liegt?

    Wenn das

    <xsl:if test="child::gl">

    <xsl:apply-templates select="child::gl">

    eintrifft, wird doch auch  
    
    > ~~~xml
    
     <xsl:template match="gl">  
    
    >   <xsl:param name="recCount" select="0"/>
    
    

    wieder erneut ausgeführt.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hi,

      Mein Debugger sagt mir, dass der Parameter bei jedem neu gefunden Match von gl wieder 0 ist. Es wird also nicht hochgezählt. Wisst ihr, wo hier mein Denkfehler liegt?

      Wenn das

      <xsl:if test="child::gl">

      <xsl:apply-templates select="child::gl">

      
      > eintrifft, wird doch auch  
      > > ~~~xml
      
       <xsl:template match="gl">  
      
      > >   <xsl:param name="recCount" select="0"/>
      
      

      wieder erneut ausgeführt.

      MfG ChrisB

      Hi ChrisB,

      danke für die Antwort. Ich habe mich an die Beispiele aus dem XSLT-Standard gehalten. Dort ist es auch ähnlich realisiert.Siehe:
      http://www.w3.org/TR/xslt20/#element-with-param

      Gruß Robert

      1. Hi,

        Mein Debugger sagt mir, dass der Parameter bei jedem neu gefunden Match von gl wieder 0 ist. Es wird also nicht hochgezählt. Wisst ihr, wo hier mein Denkfehler liegt?

        Wenn das

        <xsl:if test="child::gl">

        <xsl:apply-templates select="child::gl">

        
        > > eintrifft, wird doch auch  
        > > > ~~~xml
        
         <xsl:template match="gl">  
        
        > > >   <xsl:param name="recCount" select="0"/>
        
        

        wieder erneut ausgeführt.

        MfG ChrisB

        Hi ChrisB,

        danke für die Antwort. Ich habe mich an die Beispiele aus dem XSLT-Standard gehalten. Dort ist es auch ähnlich realisiert.Siehe:
        http://www.w3.org/TR/xslt20/#element-with-param

        Gruß Robert

        Hi nochmal,

        hat sich erledigt. Funktioniert mit <xsl:with-param name="recCount" select="$recCount+1"/> im apply-templates Element.

        Danke und Gruß
        Robert