我试图计算数字节点的总和.以下代码不返回HTML以外的任何内容.我知道sum()采用节点集.我想我已经正确地创建了变量.我究竟做错了什么.
谢谢.
XML示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<container xmlns="http://www.gtech.com/lsp/2009-09-23">
<Root>
<Incentives>
<Date>2015-03-14</Date>
<ID>507200</ID>
<ProgramName>Retailer Cash Incentive 16</ProgramName>
<Retailer>
<ID>507201</ID>
<Name>Acme #2102</Name>
<Detail>
<CashPaymentsToday>50.00</CashPaymentsToday>
<Potential>0</Potential>
</Detail>
</Retailer>
<Retailer>
<ID>507202</ID>
<Name>Acme #2103</Name>
<Detail>
<CashPaymentsToday>60.00</CashPaymentsToday>
<Potential>0</Potential>
</Detail>
</Retailer>
<Retailer>
<ID>507203</ID>
<Name>Acme #1008</Name>
<Detail>
<CashPaymentsToday>0.00</CashPaymentsToday>
<Potential>0</Potential>
</Detail>
</Retailer>
<Retailer>
<ID>507207</ID>
<Name>Acme #2228</Name>
<Detail>
<CashPaymentsToday>200.00</CashPaymentsToday>
<Potential>3</Potential>
</Detail>
</Retailer>
<Retailer>
<ID>598419</ID>
<Name>Acme NO 1071</Name>
<Detail>
<CashPaymentsToday>NONQUAL</CashPaymentsToday>
<Potential>NONQUAL</Potential>
</Detail>
</Retailer>
<Retailer>
<ID>598421</ID>
<Name>Acme NO 1072</Name>
<Detail>
<CashPaymentsToday>NONQUAL</CashPaymentsToday>
<Potential>NONQUAL</Potential>
</Detail>
</Retailer>
</Incentives>
</Root>
</container>
Run Code Online (Sandbox Code Playgroud)
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:variable name="cashPayments">
<xsl:for-each select="//Detail">
<xsl:if test="CashPaymentsToday"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="sum($cashPayments)"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
Mat*_*ler 10
首先,输入文档包含一个默认命名空间:
<container xmlns="http://www.gtech.com/lsp/2009-09-23">
Run Code Online (Sandbox Code Playgroud)
您需要考虑,即在引用输入文档时重新声明样式表和前缀元素.
然后,当您可以直接对您感兴趣的节点求和时,绝对不需要构造变量 - 但是某些CashPaymentsToday元素不包含数字:
<CashPaymentsToday>NONQUAL</CashPaymentsToday>
Run Code Online (Sandbox Code Playgroud)
您需要从总和中排除这些元素.最后,在XSLT 1.0中,您当前正在做的事情是不可能的 - 因为该sum()函数不能将所谓的结果树片段作为参数.你的方法不应该"只返回html",它实际上应该失败.
XSLT样式表
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:gt="http://www.gtech.com/lsp/2009-09-23"
exclude-result-prefixes="gt">
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="sum(//gt:CashPaymentsToday[. != 'NONQUAL'])"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
HTML输出
<html>
<body>310</body>
</html>
Run Code Online (Sandbox Code Playgroud)