2016-05-31 9 views
0

Ich habe folgende XSLT. Ich möchte die Werte bestimmter Covers in sumcontents Variable hinzufügen, aber es wird nicht summiert. Es wird immer 0 Wert angezeigt. Kann mir bitte jemand Anleitung geben, wie kann ich das erreichen?XSLT - Hinzufügen von Wert zu globalen Variablen in Schleife

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 

     <xsl:param name="sumContents">0.00</xsl:param> 

     <MSMTransformer> 
      <Recordtype> 
       <xsl:value-of select="MSMARKETPOLICY/RECORDTYPE"></xsl:value-of> 
      </Recordtype> 


      <xsl:for-each select="MSMARKETPOLICY/POLICY/ITEMS/ITEM"> 
       <xsl:for-each select="RISKS/RISK"> 
        <xsl:choose> 
         <xsl:when 
          test="(COVERS/COVER[COVERAGE='BLDG']) and (COVERS/COVER[COVERAGE='CNTS'])"> 
          <TypeOfCover>Buildings and Contents</TypeOfCover> 
          <xsl:value-of select="$sumContents + COVER/TBASICPRM" /> 
         </xsl:when> 

         <xsl:when test="COVERS/COVER[COVERAGE='BLDG']"> 
          <TypeOfCover>Buildings</TypeOfCover> 
         </xsl:when> 
         <xsl:when test="COVERS/COVER[COVERAGE='CNTS']"> 
          <TypeOfCover>Contents</TypeOfCover> 
          <xsl:value-of select="$sumContents + COVER/TBASICPRM" /> 
         </xsl:when> 
        </xsl:choose> 
       </xsl:for-each> 
      </xsl:for-each> 

      <ValueOfContentsInsured> 
       <xsl:value-of select="$sumContents"></xsl:value-of> 
      </ValueOfContentsInsured> 

     </MSMTransformer> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Sie benötigen ein Beispiel für Sie Eingabe-XML und vielleicht auch eine erwartete hinzufügen Ausgabe. Aber bedenken Sie, dass Sie eine Variable in einer Schleife nicht aktualisieren können. –

+0

Siehe: http://StackOverflow.com/questions/37484660/xslt-Adding-in-a-for-fore-each-loop/37484760#37484760 –

Antwort

1

XSLT ist eine funktionale Programmiersprache. Dies bedeutet unter anderem, dass Variablen in XSLT unveränderlich sind und dass der for-each-Befehl keine Schleife ist, sondern ein Mapping-Ausdruck ist (dh alle Elemente in der Eingabesequenz werden konzeptionell und nicht nacheinander verarbeitet)).

Um den Wert der Elemente mit einem bestimmten Zustand zusammenzufassen, wollen Sie nicht xsl: for-each, Sie wollen etwas wie sum(RISKS/RISK/COVERS/COVER[COVERAGE='CNTS' or COVERAGE='BLDG']/TBASICPRM)