【发布时间】:2017-04-30 02:39:02
【问题描述】:
使用来自 exslt.org date.msxsl.xsl 的 date:difference 函数和 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 文件中提取字符串。
那么第三次测试的变量和第二次测试的变量有什么不同呢?
如果我注释掉第三个测试的函数调用,这是输出:
测试-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>
谢谢
【问题讨论】:
-
它对我有用...使用 xlstproc 而不是 msxsl。试试 xsltproc -o diffOut.html dateDifftest.xsl dummy.xml
-
在另一篇文章中,有人告诉我使用这个 exslt.org 脚本,该脚本旨在与 msxsl 一起使用。所以我不确定是否应该“如果另一个处理器不起作用,则只使用另一个处理器” - 是正确的方法。特别是如果我打算使用该脚本中的更多功能。但我是 xsl 的新手,所以感谢任何见解。
-
同意,我也不确定这是否是正确的方法。既然如此,何不将其标记为 msxsl 以引起了解 msxsl 的人的注意……
-
好主意。会做
-
为什么这个标签是javascript?我看到日志中有一个“Microsoft JScript 运行时错误”,但是 JScript 是如何涉及的,JScript 真的是 javascript 吗?它们中的任何一个都相关吗?
标签: javascript function variables xslt msxsl