XSLT - 用逗号对数字求和

XSLT - Summing numbers with commas

我正在使用 XSLT 2.0 并且需要在节点中添加数字,该节点也可以有逗号,根据我尝试过的其他 Whosebug 线程中的建议。

<xsl:variable name="SimilarRecordsDebitSum1" sum(../Records[PaymentReference=$PayRef1 and ClientID=$vClientID1]/DebitAmount/number(translate(.,',',''))) />

但是当我在 Visual Studio 中调试它时,它一直失败并出现此错误。

Expected token ')', found '('.

我检查了括号,它们看起来都很好,没有数字和翻译功能它工作正常但当然不会添加存在逗号的节点,不确定它是 visual studio 还是是 xslt 处理器问题还是我做错了什么?

更新 1 抱歉给了错误的 xslt 声明,这是正确的。

<xsl:variable name="SimilarRecordsDebitSum1" select="sum(/DebitAmount/number(translate(.,',','')))" />

和我的 XML 的简化版本,我需要对 'DebitAmount' 元素求和,这些元素的值中可能有逗号,也可能没有逗号,但在 visual studio.

<Gen>
  <Header>
    <Login>Login</Login>
  </Header>
  <Records>
    <DebitAmount>1,402.79</DebitAmount>
  </Records>
  <Records>
    <DebitAmount>10</DebitAmount>
  </Records>  
</Gen>

-- 鉴于澄清而编辑--

我已经使用 Microsoft XslCompiledTransform 引擎重现了您报告的错误。这是一个 XSLT 1.0 处理器,不支持您正在使用的 XSLT 2.0 语法。

要使用此引擎解决问题,您可以按照以下行重写样式表:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/Gen">
    <!-- first pass -->
    <xsl:variable name="amounts">
        <xsl:for-each select="Records">
            <amount>
                <xsl:value-of select="translate(DebitAmount, ',', '')"/>
            </amount>
        </xsl:for-each>
    </xsl:variable>
    <!-- output -->
    <total>
        <xsl:value-of select="sum(exsl:node-set($amounts)/amount)"/>
    </total>
</xsl:template>

</xsl:stylesheet>

演示:https://xsltfiddle.liberty-development.net/gVrvcyo/2


请注意,某些 Microsoft 处理器可能要求扩展函数位于不同的命名空间中。