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