【发布时间】:2014-06-12 01:35:02
【问题描述】:
好的,所以我在使用 javascript 脚本对我的 XSLT 转换执行计算时遇到了麻烦。
基本上,要转换的文件中有一个xml元素,属性为startDateTime和endDateTime。我要做的就是将两者相减,然后返回该值供用户查看。
<event startDateTime = "" endDateTime = "">
<eventOutcome>Fail</eventOutcome>
<event>
显然,所有内容都会正确填写。然后,有一个 xslt 转换,需要进行数学运算以找到经过的时间。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"> //schemas included here
<msxsl:script language="JScript" implements-prefix="user">
function elapsedTime(start, end) {
return (xmlToDateTime(end).getTime() - xmlToDateTime(start).getTime()) / 1000;
}
function xmlToDateTime(xmlString) {
//a script that works fine
}
</msxsl:script>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="topLevelElement">
<wordDocument>
<body>
<sect>
<p>
<r>
<t><xsl:apply-templates select="event"/> Seconds</w:t>
</r>
</p>
<sect>
<body>
<wordDocument>
</xsl:template>
<xsl:template match="event">
<xsl:value-of select="user:elapsedTime(@startDateTime, @endDateTime)"/>
</xsl:template>
</xsl:stylesheet>
我想要做的是将事件的属性作为字符串传递给 javascript 函数。相反,它所做的是传递一个 Visual Studio 标识为 {MS.Internal.Xml.XPathArrayIterator} 的对象。如果我直接使用字符串,该函数可以正常工作
<xsl:value-of select="user:elapsedTime(DATETIME', 'DATETIME')
所以问题不在于 javascript 本身,而在于我发送参数的能力。
官方的 MS 文档帮助不大。
http://msdn.microsoft.com/en-us/library/533texsx(v=vs.110).aspx
一方面,他们使用 C# 而不是 JS,我不确定其意义。但他们只是传递了一个元素的名称,没有解释它是如何得到这个值的。
我也在这里阅读了常见问题解答
http://www.dpawson.co.uk/xsl/sect4/N9745.html#d13958e70
而且他们的代码不起作用!它给出了传递 {MS.Internal.Xml.XPathArrayIterator} 而不是值的相同问题。
我在这里不知所措,所以我愿意接受任何建议。提前致谢。
【问题讨论】:
标签: javascript xml xslt-1.0 msxml