我有以下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>
答案 0 :(得分:1)
XSLT是一种函数式编程语言。除此之外,这意味着XSLT中的变量是不可变的,并且for-each指令不是循环,它是映射表达式(也就是说,它在概念上同时处理输入序列中的所有项,而不是一个接一个地处理)。
要将具有特定条件的元素的值相加,您不希望xsl:for-each,您需要类似sum(RISKS/RISK/COVERS/COVER[COVERAGE='CNTS' or COVERAGE='BLDG']/TBASICPRM)