2014-07-15 91 views
1

屬性我試圖總結width屬性的值,但它只是CONCAT他們的價值觀總和值在XSLT

這裏是我的代碼

XSLT

<xsl:template match="//table"> 
    <xsl:variable name="numb" type="xs:integer*"> 
     <xsl:for-each select="tr/td[@width]"> 
      <xsl:value-of select="number(translate(@width,'%',''))"/> 
     </xsl:for-each> 
    </xsl:variable> 
    <p> 
     <xsl:value-of select="sum($numb)"/> 
    </p> 
</xsl:template> 

XML

<table> 
    <tr> 
     <td width="100%"><p>x</p> 
     </td> 
     <td width="20%"><p>x</p></td> 
    </tr> 
</table> 

我得到結果爲:10020

+0

請不要逃避你的XML代碼,這是一個痛苦進入它的編輯器的方式。相反,當您在S-O上發佈問題時(或縮進四個空格,這是相同的),只需單擊編輯器中的代碼按鈕即可)。它會爲你節省繁瑣的每個''字符的逃逸痛苦。哦,併爲可讀性縮進代碼;)。修復。 – Abel

+0

PS:你的代碼實際上是正確的,而Martin Honnen的版本更簡單。唯一的錯誤是'type =「xs:integer *',它應該是'as =」xs:integer *'。然後它「只是工作」(考慮到你沒有得到一個錯誤是非常非常奇怪的) – Abel

回答

1

假設XSLT 2.0所有你需要的是

<xsl:template match="table"> 
    <p> 
    <xsl:value-of select="sum(tr/td[@width]/number(translate(@width, '%', '')))"/> 
    </p> 
</xsl:template> 
+0

IE顯示以下錯誤:NodeTest預計在這裏。 sum(tr/td [@width]/- > number < - (translate(@width,'%',''))) – Ssmohaideen

+0

好吧,您已將問題標記爲XSLT 2.0,因此請使用像Saxon這樣的XSLT 2.0處理器9,XmlPrime,Altova嘗試發佈代碼。像IE這樣的瀏覽器只支持XSLT 1.0,我發佈的這種表達方式完全不受支持。 –

+0

對不起,謝謝。有用 – Ssmohaideen