ThomasM: Summe von Werten, wo erst noch etwas abgeschnitten werden muss

Beitrag lesen

Hallo Kai,

Bisher verwende ich XSLT 1.0, ich denke wenn ich jetzt auf XSLT 2.0 umstelle, werde ich an vielen Stellen erstmal ein Problem bekommen oder? Habe nämlich an die 1000Zeilen in meiner XSLT-Datei, da wir verschiedene XML-Dateien (mit unterschiedener STruktur )haben. Oder unterstützt XSLT 2.0 alles von XSLT 1.0?

Im Grunde sollte die Verwendung von version="2.0" funktionieren. Es kann bzgl. der Behandlung von Knotenmengen als sog. Sequenzen evtl. zu anderen Ergebnissen kommen, dann müsste man genauer nachsehen. Probiere es mal aus.

Ich muss aber ehrlichgesagt sagen dass ich noch nie ein template geschrieben habe, das über with-param aufgerufen wird. Irgendwie müsste ich ja von for-each den aktuellen Wert $width übergeben und in bilde_summe übergeben und addieren, aber das Problem ist, dass ich die Variable, in der die Summe gespeichert ist, ja nicht in sich selber aufrufen kann.

Mein eingangs verwendetes Beispiel habe ich mal für 1.0 umgeschrieben (Ergebnis wiederum 3.02):

<xsl:template match="table">  
  <xsl:call-template name="cw_summe">  
    <xsl:with-param name="summe" select="0"/>  
    <xsl:with-param name="i" select="count(tgroup/colspec[@colwidth])"/>  
  </xsl:call-template>  
</xsl:template>  
  
<xsl:template name="cw_summe">  
  <xsl:param name="summe"/>  
  <xsl:param name="i"/>  
  
  <xsl:choose>  
    <xsl:when test="$i > 0">  
      <xsl:variable name="cw" select="number(substring-before(tgroup/colspec[@colwidth][$i]/@colwidth, '*'))"/>  
      <xsl:call-template name="cw_summe">  
        <xsl:with-param name="summe" select="$summe + $cw"/>  
        <xsl:with-param name="i" select="$i - 1"/>  
      </xsl:call-template>  
    </xsl:when>  
    <xsl:otherwise>  
       <xsl:value-of select="$summe"/>  
    </xsl:otherwise>  
  </xsl:choose>  
</xsl:template>

Grüße,
Thomas