总和未添加浮点变量。它是在浓缩XSLT中的值

时间:2019-05-14 06:46:29

标签: xslt

当我尝试对浮点变量求和时,会导致所有变量的串联字符串而不是总和。我不知道该怎么办。

<xsl:for-each select="G_1/G_2/FILE_FRAGMENT/SLO_CALPERS_PAYROLL/Person_DG">
                            <xsl:choose>
                                    <xsl:when test="Run_Results_Record/Run_Results_DG/Run_Results/Input_Value_Base_Name= 'Amount' and Run_Results_Record/Run_Results_DG/Run_Results/Amount != 0">
                                        <xsl:value-of select="sum(format-number(Run_Results_Record/Run_Results_DG/Run_Results/Amount, '0.00'))"/>
                                    </xsl:when>
                            </xsl:choose>
                            </xsl:for-each>

预期

<results>23.46</results>

实际结果

<results>0.9311.2111.32</results>

1 个答案:

答案 0 :(得分:1)

操作顺序错误。您应该:

  • 第一个和Amount个值。
  • 然后将所需的格式(应用于刚刚计算出的总和)。

因此,对于我的示例数据:

<main>
  <Amount>1.7</Amount>
  <Amount>3.3</Amount>
</main>

我执行了以下脚本:

<xsl:template match="main">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
    <Sum><xsl:value-of select="format-number(sum(Amount), '0.00')"/></Sum>
  </xsl:copy>
</xsl:template>

(+ 身份模板),得到:

<main>
    <Amount>1.7</Amount>
    <Amount>3.3</Amount>
    <Sum>5.00</Sum>
</main>

您的代码的另一个缺陷是您放入求和指令 在循环内(和选择)。

这样,每次您的代码找到“允许的” 金额(!= 0)时 它求和并输出仅一个值

结果是您得到了各个值的连接。

我的建议是:

  • 完全放弃循环。
  • 选择几乎没有意义,因为零不太可能改变总和。
  • 在您的代码中,添加 XPath 的适当初始部分 ( G_1 / G_2 / FILE_FRAGMENT / SLO_CALPERS_PAYROLL / Person_DG / Run_Results_Record / Run_Results_DG / Run_Results / )到 select 子句。