【问题标题】:How to pass arguments when using Javascript as part of XSLT transformation使用 Javascript 作为 XSLT 转换的一部分时如何传递参数
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 完美运行。我在任何地方都没有看到这个建议。谢谢。
    • 我的荣幸。另请注意,还有另一种情况将字符串传递给 js 函数:'{@startDateTime}',这不适合您的情况。
    • 对。您不能在选择属性中使用 AVT。不过,这是一个很好的概括性观点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多