我试图总结以下由ID
的唯一字段分组的成本xml如下:
<table>
<tr>
<td>1</td>
<td>"£20,000.00"</td>
</tr>
<tr>
<td>2</td>
<td>"£1,000.00"</td>
</tr>
<tr>
<td>1</td>
<td>"-£2,000.00"</td>
</tr>
<tr>
<td>2</td>
<td>"£2,000.00"</td>
</tr>
<tr>
<td>1</td>
<td>"£1,000.00"</td>
</tr>
我已经生成了以下内容,由于非数字字符而不断返回NAN。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" version="1.0" encoding="UTF-8"/>
<xsl:key name="UniqueJobNumber" match="table/tr" use="td[01]"/>
<xsl:template match="table">
<xsl:for-each select="tr[(count(. | key('UniqueJobNumber', td[01])[1]) = 1)]">
<xsl:variable name= "PaymentRequestValue" select="sum(key('UniqueJobNumber',td[01])/td[02])"/>
<xsl:value-of select="td[01]"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$PaymentRequestValue"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
有没有人知道删除£的方法,以及“字段中的字符使总和有效?我已经尝试在用于计算值的变量中使用翻译函数但这似乎不起作用。” p>
干杯,
马特
答案 0 :(得分:1)
有没有人知道如何删除£和“来自的人物” 字段使总和工作?
您需要逐个执行此操作。尝试类似:
编辑:我用更通用的模板替换了以前的模板。除了删除不需要的字符外,这个仅保留仅对数字类型值有效的字符:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<total>
<xsl:call-template name="total">
<xsl:with-param name="nodes" select="table/tr/td[2]"/>
</xsl:call-template>
</total>
</xsl:template>
<xsl:template name="total">
<xsl:param name="nodes"/>
<xsl:param name="sum" select="0"/>
<xsl:choose>
<xsl:when test="count($nodes)">
<xsl:variable name="num" select="translate($nodes[1], translate($nodes[1], '-.0123456789', ''), '')" />
<xsl:call-template name="total">
<xsl:with-param name="nodes" select="$nodes[position() > 1]"/>
<xsl:with-param name="sum" select="$sum + $num"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$sum"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>