使用日期:exslt.org date.msxsl.xsl与msxsl的区别功能。 如果我使用字符串文字,那么该函数工作正常。 但是如果我从xml文件中获取字符串并将它们放入变量中,然后将这些变量用于“差异”函数,我会收到以下错误:
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个使用相同的日期时间字符串。
第一个测试调用函数与字符串文字。 第二个测试调用以变量形式运行,其中字符串作为其内容。 第三次测试 - 并且测试失败 - 从xml文件中提取字符串。
那么第三次测试的变量与第二次测试的变量有何不同?
如果我注释掉第3次测试的函数调用,则输出:
TEST-1
PT2M1S
TEST-2
2011-12-13T16:15:26
2011-12-13T16:17:27
PT2M1S
TEST-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>
由于
答案 0 :(得分:2)
查看您链接到的来源我看到了
<doc:args>
<doc:arg name="date" type="string" default="''" optional="yes"></doc:arg>
<doc:arg name="date" type="string" default="''" optional="yes"></doc:arg>
</doc:args>
所以我建议尝试在XSLT / XPath端确保将字符串值作为参数传递
<xsl:variable name="startTime" select="string(start)"/>
<xsl:value-of select="$startTime"></xsl:value-of>
<br/>
<xsl:variable name="endTime" select="string(end)"/>
<xsl:value-of select="$endTime"></xsl:value-of>
<br/>
<xsl:value-of select="date:difference($startTime, $endTime)"/>