将字符串转换为数字以求和,避免获得NaN

时间:2014-03-29 07:21:44

标签: sql xml xslt xslt-1.0

我想使用XSLt V 1.0对一些值进行求和,但它们被视为字符串。 xml的样本如下所示,我的样本xslt也是如此。我应该更改基础SQL视图中的数据类型吗?我尝试了各种数字数据类型,但我需要保留小数或金钱格式,因为这应该是总共美元。有没有办法在XSLT中使用可能的变量,允许我将此字符串转换为数字?我试图使用数字()转换,但我仍然得到NaN。不要对xslt了解太多,非常感谢任何帮助,或者如果你能指出我的相关资源。

     <?xml version="1.0" encoding="utf-8"?>
    <xml>
      <object>
        <objectid>183382</objectid>
        <objectnumber>Test00001237</objectnumber>
        <lccs>
          <lcc>
            <groupname>Costs: Acquisition planning</groupname>
            <userfieldgroupid>9</userfieldgroupid>
            <userfieldname>Concept development hours</userfieldname>
            <userfieldid>42</userfieldid>
            <fieldvalue>1</fieldvalue>
            <depreciationlife>25</depreciationlife>
            <costs>46</costs>
          </lcc>
          <lcc>
            <groupname>Costs: Acquisition planning</groupname>
            <userfieldgroupid>9</userfieldgroupid>
            <userfieldname>Concept assessment hours</userfieldname>
            <userfieldid>43</userfieldid>
            <fieldvalue>.25</fieldvalue>
            <depreciationlife>25</depreciationlife>
            <costs>11.5</costs>
          </lcc>
        </lccs>
      </object>
    </xml>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:js="urn:custom-javascriptscript" exclude-result-prefixes="msxsl js">
<xsl:output method="html" omit-xml-declaration="yes" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html4/loose.dtd" indent="yes"/>
<xsl:template match="/xml/object">
<html>
<head>
</head>
<body>
    <table>
    <tr style="font-weight:bold" >
    <td>Item</td>
    <td>$</td>
    </tr>
    <xsl:for-each select="lccs/lcc"> 
    <xsl:choose>
    <xsl:when test="normalize-space(userfieldid)='42'">
    <tr>
    <td>
    <xsl:value-of select="normalize-space(fieldvalue)"/>
    </td>
    <td>            
    <xsl:value-of select="normalize-space(number(costs))"/>
    </td>
    </tr>
    </xsl:when> 
    <xsl:when test="normalize-space(userfieldid)='43'">
    <tr>
    <td>
    <xsl:value-of select="normalize-space(fieldvalue)"/>
    </td>
    <td>                                
    <xsl:value-of select="normalize-space(number(costs))"/>
    </td>
    </tr>   
     <tr>
    <td>Subtotal</td>
    <td><xsl:value-of select="sum(//costs)"/></td>
    </tr>       
    </xsl:when>             
    </xsl:choose>       
    </xsl:for-each>             
    </table>
     </body>
</html>
</xsl:template> 
 </xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

  

我需要保留小数或金钱格式,因为这应该是   共计美元。

通常,对于需要以数字方式处理的输入数据,最好只包含数字,小数点和减号。您始终可以在输出中将结果重新格式化为十进制/货币。如果您不确定所使用的货币,请将其包含在单独的元素中或作为属性。