ThomasM: Unbekannte Anzahl an Werten addieren

Beitrag lesen

Hallo Implementation,

Das XSL-Stylesheet soll diese Preise automatisch ausrechnen.
...
Doch wie schaffe ich es, die Members auszulesen, das price-Attribut des entsprechenden Tags zu ermitteln und dann alle zu summieren?

Probiere es mit diesem Ansatz:

<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
  xmlns:attr="http://nanoprise.freehostia.de/" exclude-result-prefixes="attr">  
  
<xsl:template match="COMPUTER">  
  <table>  
    <thead>  
      <tr>  
        <th>Info</th><th>Preis</th>  
      </tr>  
    </thead>  
    <tbody>  
      <xsl:apply-templates select="attr:info"/>  
    </tbody>  
  </table>  
</xsl:template>  
  
<xsl:template match="attr:info">  
  <tr>  
   <td><xsl:value-of select="@label"/>:</td>  
   <td>  
      <xsl:call-template name="preis">  
        <xsl:with-param name="summe" select="0"/>  
        <xsl:with-param name="teile">  
          <xsl:for-each select="member">  
            <xsl:value-of select="concat(.,'|')"/>  
          </xsl:for-each>  
        </xsl:with-param>  
      </xsl:call-template>  
    </td>  
  </tr>  
</xsl:template>  
  
<xsl:template name="preis">  
  <xsl:param name="summe"/>  
  <xsl:param name="teile"/>  
  <xsl:choose>  
    <xsl:when test="string-length($teile) > 0">  
      <xsl:call-template name="preis">  
        <xsl:with-param name="summe" select="$summe +  
          number(translate(/COMPUTER/child::*[local-name() = substring-before($teile,'|')]/@price,',','.'))"/>  
        <xsl:with-param name="teile" select="substring-after($teile,'|')"/>  
      </xsl:call-template>  
    </xsl:when>  
    <xsl:otherwise>  
      <xsl:value-of select="$summe"/>  
    </xsl:otherwise>  
  </xsl:choose>  
</xsl:template>  
  
</xsl:stylesheet>

Ergebnis:

Info       Preis
Gesamt:    341.61
ohne Case: 281.71

Grüße,
Thomas