2016-07-31 10 views
2

In einem Mule-Flow möchte ich die Zeitdauer im Format "hh: mm" in einer XML-Datei mit XSLT in Sekunden umwandeln.XSLT-Fehler bei mathematischen Operationen

Für die Konvertierung verwendete ich die folgende,

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

aber es gibt die folgende Fehlermeldung ....

XPTY0004: arithmetischer Operator ist für Argumente der Typen nicht definiert (xs: integer, xs: string)

Was ist das Problem dieses Ansatzes?

+0

Dieser Fehler wird nur in XSLT 2.0 hergestellt werden. Verwendet Mule nicht Xalan (ein XSLT 1.0 Prozessor)? –

Antwort

1

Sie scheinen XSLT 2.0 zu verwenden, und in 2.0 müssen Sie Strings explizit in Zahlen konvertieren, bevor Sie arithmetisch arbeiten.

Die andere Option ist Datum/Zeit/Dauer Arithmetik zu verwenden:

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

Danke das funktioniert für mich. – Hirantha

2

Verwenden Sie number(), um das Ergebnis von substring-before() und substring-after() von einer Zeichenfolge in eine Zahl zu konvertieren.

+2

Dies liegt daran, dass '60' eine Ganzzahl ist, wie die Fehlermeldung anzeigt, aber' substring-after (text(), ':') 'ergibt eine Zeichenkette. Sie können eine Zeichenfolge nicht multiplizieren. Sie müssen es zuerst in eine Zahl umwandeln. – LarsH