Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Bei xsl Summe für Gruppe ermitteln (https://www.delphipraxis.net/108625-bei-xsl-summe-fuer-gruppe-ermitteln.html)

Assertor 16. Feb 2008 22:13


Bei xsl Summe für Gruppe ermitteln
 
Hallo,

ich sitze gerade vor dem Problem, Summen aus XML Basisdaten per XSL zu ermitteln.

Grober Datenaufbau:

Delphi-Quellcode:
Produktliste
- Produkt
  Anzahl
  Einzelpreis
  - Unterprodukt
    Anzahl
    Einzelpreis
  - Unterprodukt
    Anzahl
    Einzelpreis
- Produkt2 ...
Ich wandeln das ganze nun per XSL in HTML um. Es klappt auch soweit alles, bis auf die Summenberechnung.

Wie kann ich pro Produkt den Gesamtpreis ausgeben (also Produkt-Anzahl x Produkt-Preis + Unterprodukt1-Anzahl * Unterprodukt1-Preis + etc.pp.)?

Vielen Dank für Eure Hilfe.

Gruß Assertor

P.S.: Node-Set geht schonmal nicht, da ich nicht sicher weiß, ob MS XML oder Xalan am Zielort läuft...

Assertor 16. Jun 2009 10:22

Re: Bei xsl Summe für Gruppe ermitteln
 
Hi,

*push* :wink:

Nein, war nur Spaß. Wollte sagen, ich hatte gestern gerade mal die Zeit und Muße mich wieder darum zu kümmern. Nun läuft es. String-Replace und Summen sind in XSLT 1.0 aber sehr unschön gelöst, immer rekursiv iterieren. Bei XSLT 2.0 oder mit Extensions wie EXSLT (z.B. bei libexslt) geht das schöner.

Beispiel für eine kleine Summenberechnung:
XML-Code:
<xsl:template name="CalcArticleTotalSum">
  <xsl:param name="node"/>
  <xsl:param name="sum"/>
  <xsl:param name="i"/>
  <xsl:param name="max"/>
  <xsl:choose>
    <xsl:when test="$i &lt;= $max">
      <xsl:variable name="product">
       
        <xsl:call-template name="CalcSingleArticleTotalSum">
          <xsl:with-param name="node" select="$node/Article[$i]" />
        </xsl:call-template>
      </xsl:variable>
     
      <xsl:call-template name="CalcArticleTotalSum">
        <xsl:with-param name="node" select="$node"/>
        <xsl:with-param name="sum" select="$sum + $product"/>
        <xsl:with-param name="i" select="$i + 1"/>
        <xsl:with-param name="max" select="$max"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="format-number($sum,'#.##')"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>
Das fehlende CalcSingleArticleTotalSum sieht dabei ähnlich aus, berücksichtigt jedoch zusätzlich die Unterprodukte.

Gruß Assertor


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz