2016-07-31 18 views
2

ミュールフローでは、xmlファイルの時間間隔をXSLTを使用して秒に変換します。変換のため数学操作を行うときのXSLTエラー

Iは、

<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

substring-before()substring-after()の結果を文字列から数値に変換するには、number()を使用します。

+2

これは、エラーメッセージが示すように、 '60'は整数ですが、' substring-after(text()、 ':') 'は文字列を生成するためです。文字列を乗算することはできません。最初に番号に変換する必要があります。 – LarsH

関連する問題