将字符串类型编号转换为int编号,并在XSLT 1.0中汇总

时间:2016-03-04 04:46:01

标签: xml xslt xslt-1.0

我有以下XML,

    <Answers>
     <Entry key="total" type="System.String">
      <value>50,000</value>
     </Entry>
    </Answers>
    <Answers>
     <Entry key="total" type="System.String">
      <value>2,000</value>
     </Entry>
    </Answers>
    <PerPersonTotal>1000</PerPersonTotal>

在XSLT 1.0中,我必须总结所有值并计算百分比。

请注意,金额值为逗号。

<xsl:value-of select="(PerPersonTotal div sum(number(Answers/Entry[@key='total']/value))) * 100

我正在低于错误

  

函数'sum()'的参数1无法转换为节点集。

如果我删除数字函数,我会得到NaN作为结果。

1 个答案:

答案 0 :(得分:0)

  

请注意,金额值为逗号。

这就是问题所在:包含逗号的字符串不是数字。要在XSLT 1.0中解决此问题,您需要执行以下操作:

<xsl:variable name="values">
    <xsl:for-each select="Answers/Entry[@key='total']">
        <value>
            <xsl:value-of select="translate(value, ',', '')"/>
        </value>
    </xsl:for-each>
</xsl:variable>
<result>
    <xsl:value-of select="PerPersonTotal div sum(exsl:node-set($values)/value)"/>
</result>
声明xmlns:exsl="http://exslt.org/common"

- 请参阅:http://exslt.org/exsl/index.html

注意:

  1. 这假定此处的逗号用作千位分隔符;
  2. 要将数字格式化为百分比,您应该使用format-number() 功能,不要乘以100。