2016-07-31 44 views
2

在一个骡流中,我想使用XSLT将xml文件中格式为“hh:mm”的持续时间转换为秒。执行数学运算时出现XSLT错误

为了转化我用下面,

<xsl:template match="EventDuration"> 
    <duration> 
     <xsl:value-of select="60*substring-after(text(), ':') + 3600*substring-before(text(), ':')" /> 
    </duration> 
</xsl:template> 

,但它提供了以下错误....

XPTY0004:算术运算符不为类型参数(XS定义:整数, xs:string)

这种方法的问题是什么?

+0

该错误将仅在XSLT 2.0来制备。不是Mule使用Xalan(一个XSLT 1.0处理器)? –

回答

1

您似乎正在使用XSLT 2.0,而在2.0中,您需要在执行算术运算之前将字符串明确地转换为数字。

你的其他选择是使用日期/时间/持续时间算术:

(xs:time(concat(text(), ":00") - xs:time("00:00:00")) div xs:dayTimeDuration("PT1S") 
+0

感谢这对我有用。 – Hirantha

2

使用number()substring-before()substring-after()的结果从字符串转换为数字。

+2

这是因为,如错误信息所示,'60'是一个整数,但'substring-after(text(),':')'产生一个字符串。你不能乘以一个字符串;你必须先将它转换成数字。 – LarsH