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

How to pass arguments when using Javascript as part of XSLT transformation

本文关键字:一部 分时 参数 何传递 Javascript 作为 XSLT 转换      更新时间:2023-09-26

好的,所以我在使用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,我不确定这有什么意义。但是它们只是传递了元素的名称,没有解释它是如何获得该值的。

我还在这里阅读了FAQ

http://www.dpawson.co.uk/xsl/sect4/N9745.html d13958e70

他们的代码不工作!它给出了传递{MS.Internal.Xml相同的问题。XPathArrayIterator}而不是value。

我不知道该怎么做,所以我愿意接受任何建议。

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