2014-07-15 142 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