svg4you: Rekursiv aufrufen, dabei Werte addieren

Beitrag lesen

Tach Matze,

Und wie soll ich jetzt sagen: So lange du bei dem Kunden bist, suche alle alte Stellen der Historie heraus, ....

Der naive Ansatz:

  
<xsl:for-each select="kunde">  
  <tr>  
    <td><xsl:value-of select="kundename"/></td>  
    <td><xsl:value-of select="sum(historie/stelle/arbeitszeit * historie/stelle/stundensatz)"/></td>  
  </tr>  
</xsl:for-each>

funktioniert so nicht, weil sum() nur auf eine Knotenmenge und nicht auf den Audruck angewendet werden kann.

Mit einem Wurzelelement kunden wäre das eine Möglichkeit mit rekursiver Summation:

  
<?xml version="1.0" encoding="ISO-8859-1"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  
  <xsl:template match="kunden">  
    <html>  
      <head>  
        <title>Test</title>  
      </head>  
      <body>  
        <table border="1">  
          <tr>  
            <th>Kunde</th>  
            <th>Summe</th>  
          </tr>  
          <xsl:for-each select="kunde/historie">  
            <tr>  
              <td><xsl:value-of select="../kundename"/></td>  
              <td>  
                <xsl:call-template name="bilde_summe">  
                  <xsl:with-param name="stelle" select="stelle"/>  
                </xsl:call-template>  
              </td>  
            </tr>  
          </xsl:for-each>  
        </table>  
      </body>  
    </html>  
  </xsl:template>  
  
  <xsl:template name="bilde_summe">  
    <xsl:param name="stelle"/>  
    <xsl:choose>  
      <xsl:when test="$stelle">  
        <xsl:variable name="summe">  
          <xsl:call-template name="bilde_summe">  
            <xsl:with-param name="stelle" select="$stelle[position() > 1]"/>  
          </xsl:call-template>  
        </xsl:variable>  
        <xsl:value-of select="$summe + $stelle/arbeitszeit * $stelle/stundensatz"/>  
      </xsl:when>  
      <xsl:otherwise>0</xsl:otherwise>  
    </xsl:choose>  
  </xsl:template>  
  
</xsl:stylesheet>

Ergebnis:

Kunde Summe
-----------
er    2112
sie   1521

Man liest sich,
svg4you