Besoin de calculer la valeur de chaque boucle et montant en XSLT 1.0

Dire que j'ai un simple document XML d'entrée comme:

<Amounts>
    <item>
        <Base>4750</Base>
        <Tax1>2800</Tax1>
        <Tax2>50</Tax2>
    </item>
    <item>
        <Base>4750</Base>
        <Tax1>2800</Tax1>
        <Tax2>50</Tax2>
    </item>
</Amounts>

Et d'une transformation XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output  version="1.0" method="xml" omit-xml-declaration="yes" indent="yes"/>
    <xsl:template match="/">
      <xsl:element name="MyTax">
        <xsl:variable name="bf" select="sum(//item/Base)"/>
        <xsl:variable name="discount" select="$bf * 0.08"/>
        <xsl:variable name="bf1" select="$bf - $discount"/>
        <xsl:variable name="yq1" select="sum(//item/Tax1)"/>
        <xsl:variable name="yr1" select="sum(//item/Tax2)"/>
        <xsl:variable name="stax">
            <xsl:value-of select="round(format-number((($bf1 + $yq1 + $yr1) * 0.0495),'#.##'))"/>
        </xsl:variable>
        <xsl:element name="Stax"><xsl:value-of select="$stax"/></xsl:element>
      </xsl:element>
    </xsl:template>
</xsl:stylesheet>

Nous obtenons une sortie XML:

<MyTax>
    <Stax>715</Stax>
</MyTax>

Cependant, maintenant, je voudrais calculer stax séparément pour chaque élément, puis de la somme de ces éléments - c'est parce que dans l'exemple ci-dessus, je me retrouve avec des erreurs d'arrondi comme la somme de l'individu stax est en fait 714 - la valeur que je recherche, plutôt que de 715 ci-dessus.

La sortie, je suis à la recherche d'seraient:

<MyTax>
         <item>
    <Stax>357</Stax>
         </item>
         <item>
            <Stax>357</Stax>
         </item>
         <TotalStax>714</TotalStax>
</MyTax>

Si je peux mettre en place pour chacun, comment dois-je calculer stax dans une variable, pour chaque passage, et puis résumer l'individu stax? Je suis limité XSLT 1.0, vu certaines réponses à l'aide des touches et nodesets mais je ne suis pas en mesure de comprendre comment les appliquer.

Votre XSLT seulement un stax calcul sur l'ensemble de l'entrée. Il ne peut pas produire la sortie de vous montrer. La valeur calculée de stax est 714.78, qui vous ai demandé le processeur à la ronde. Cette tours à 715. Pourquoi voulez-vous 714 sortie?
Jim, je me suis fait avoir à produire de l'714 somme - qui ne vient que par le calcul de la stax séparément dans chaque course (357) et en additionnant tous les stax - me donner 357+357 = 714 au lieu de 715 si je fais le calcul sur la somme des éléments individuels. Je suis incapable de créer le XSLT pour cette sortie requise...

OriginalL'auteur Surge | 2012-10-30