2014-03-29 18 views
0

我想使用XSLt V 1.0對一些值進行求和,但將它們視爲字符串。以下是xml的示例,以及我的示例xslt。我應該改變底層SQL視圖中的數據類型嗎?我嘗試了各種數字數據類型,但我需要保留小數或金錢格式,因爲這應該是總計美元。有沒有在XSLT中使用可能的變量的方法,這將允許我將該字符串轉換爲數字?我試圖使用數字()轉換,但我仍然得到NaN。不要太瞭解xslt,並且非常感謝任何幫助,或者如果你能指點我的相關資源。將字符串轉換爲數字進行求和並避免使用NaN

 <?xml version="1.0" encoding="utf-8"?> 
    <xml> 
     <object> 
     <objectid>183382</objectid> 
     <objectnumber>Test000</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> 
+0

無論你遇到的問題:如果是貨幣,[浮點算術不是無論如何去](http://stackoverflow.com/questions/14741009/perl-for-loop-going-失控/ 14741188#14741188)。 –

+0

請發佈允許我們重現問題的代碼。將樣式表應用於輸入不會**在任何地方產生NaN結果。 –

+0

作爲旁註,您的小計都計算相同的值,至少有一個「//費用」應該是相對路徑。 –

回答

1

我需要的,因爲這應該是 共計美元仍保留小數或貨幣格式。

一般來說,最好對輸入數據進行數字處理,使其僅包含數字,小數點和負號。您可以隨時將輸出結果重新格式化爲十進制/貨幣。如果您不確定所使用的貨幣,請將其包含在單獨的元素中或作爲屬性。

+0

非常感謝您的建議。我知道我可以將數據重新格式化爲貨幣。我試圖 - 有點拼命 - 通過更改基礎數據類型來「修復」我的問題,因爲我比sql更適合使用xslt。 – user3471259

+0

XML中幾乎沒有數據類型,除非您使用額外的模式文檔 - 即使如此,您也需要一個模式感知處理器(請參閱:XSLT 2.0)來利用它。 –