msxslで exslt.org date.msxsl.xslの date:difference 関数を使用します。文字列リテラルを使用すると、関数は正常に機能します。しかし、xml ファイルから文字列を取得して変数に入れ、それらの変数を「difference」関数に使用すると、次のエラーが発生します。
msxsl.exe dummy.xml dateDifftest.xsl -o diffOut.html
Error occurred while executing stylesheet 'dateDifftest.xsl'.
Code: 0x80020009
Microsoft JScript runtime error
Wrong number of arguments or invalid property assignment
line = 954, col = 3 (line is offset from the start of the script block).
Error returned from property or method call.
この xsl で 3 つのテストを行いました。3 つすべてが同じ日時文字列を使用します。
最初のテストでは、文字列リテラルを使用して関数を呼び出します。2 番目のテストでは、文字列を内容とする変数を使用して関数を呼び出します。3 番目のテスト (失敗したテスト) では、xml ファイルから文字列を取得します。
では、3 番目のテストの変数は 2 番目のテストの変数とどう違うのでしょうか?
3 番目のテストの関数呼び出しをコメント アウトすると、次のように出力されます。
テスト-1
PT2M1S
テスト-2
2011-12-13T16:15:26
2011-12-13T16:17:27
PT2M1S
テスト-3
2011-12-13T16:15:26
2011-12-13T16:17:27
xsl ファイル:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
>
<xsl:include href="date.msxsl.xsl" />
<!-- msxsl.exe dummy.xml dateDifftest.xsl -o diffOut.html -->
<xsl:template match="/A/B/C">
<TEST1>
TEST-1
<br/>
<xsl:value-of select="date:difference('2011-12-13T16:15:26', '2011-12-13T16:17:27')"/> <!-- outputs "PT2M1S", the difference is 2 mins and 1 sec -->
</TEST1>
<br/>
<TEST2>
TEST-2
<br/>
<xsl:variable name="startTime" select="'2011-12-13T16:15:26'"/>
<xsl:value-of select="$startTime"></xsl:value-of>
<br/>
<xsl:variable name="endTime" select="'2011-12-13T16:17:27'"/>
<xsl:value-of select="$endTime"></xsl:value-of>
<br/>
<xsl:value-of select="date:difference($startTime, $endTime)"/> <!-- also outputs "PT2M1S" -->
</TEST2>
<br/>
<TEST3>
TEST-3
<br/>
<xsl:variable name="startTime" select="start"/>
<xsl:value-of select="$startTime"></xsl:value-of>
<br/>
<xsl:variable name="endTime" select="end"/>
<xsl:value-of select="$endTime"></xsl:value-of>
<br/>
<!-- <xsl:value-of select="date:difference($startTime, $endTime)"/>--> <!-- FAILS HERE -->
</TEST3>
</xsl:template>
入力 xml ファイル:
<A>
<B>
<C>
<start>2011-12-13T16:15:26</start>
<end>2011-12-13T16:17:27</end>
</C>
</B>
</A>
ありがとう