好的,我正在使用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}而不是值的相同问题。
我在这里不知所措,所以我对任何建议持开放态度。提前谢谢。
答案 0 :(得分:2)
要将字符串传递给javascript函数,可以使用字符串函数:string(@startDateTime),string(@endDateTime)