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 处理器可能要求扩展函数位于不同的命名空间中。
我正在使用 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 处理器可能要求扩展函数位于不同的命名空间中。