XSL 1.0使用£汇总值,“并且在使用键时使用

时间:2014-02-26 17:27:48

标签: xml key sum xslt-1.0 comma

我试图总结以下由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>&#13;</xsl:text>
    </xsl:for-each>
</xsl:template>

有没有人知道删除£的方法,以及“字段中的字符使总和有效?我已经尝试在用于计算值的变量中使用翻译函数但这似乎不起作用。” p>

干杯,

马特

1 个答案:

答案 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>