XSLT - 在循环中为全局变量添加值

时间:2016-05-31 11:28:09

标签: xml xslt

我有以下XSLT。我想在sumcontents变量中添加特定覆盖的值,但它并没有总结。它始终显示0值。有人可以指导,我怎样才能做到这一点。

<?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>

1 个答案:

答案 0 :(得分:1)

XSLT是一种函数式编程语言。除此之外,这意味着XSLT中的变量是不可变的,并且for-each指令不是循环,它是映射表达式(也就是说,它在概念上同时处理输入序列中的所有项,而不是一个接一个地处理)。

要将具有特定条件的元素的值相加,您不希望xsl:for-each,您需要类似sum(RISKS/RISK/COVERS/COVER[COVERAGE='CNTS' or COVERAGE='BLDG']/TBASICPRM)

的内容