如何在使用Javascript作为XSLT转换的一部分时传递参数

时间:2014-06-12 01:35:02

标签: javascript xml xslt-1.0 msxml

好的,我正在使用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}而不是值的相同问题。

我在这里不知所措,所以我对任何建议持开放态度。提前谢谢。

1 个答案:

答案 0 :(得分:2)

要将字符串传递给javascript函数,可以使用字符串函数:string(@startDateTime),string(@endDateTime)