将多个参数XSLT到javascript中



我试图在xsl中创建一个接受多个参数的javascript函数。我不能让它工作,得到以下错误:

Code:   0x80020009
Microsoft JScript runtime error
Wrong number of arguments or invalid property assignment
line = 37, col = 2 (line is offset from the start of the script block).
Error returned from property or method call.

函数如下:

<msxsl:script language="JavaScript" implements-prefix="jsfuncs">
    <![CDATA[
    function getLineLength (x1,x2,y1,y2)
    {
    var xVector = x2 - x1;
    var yVector = y2 - y1;
    var output = Math.sqrt(raised2(xVector)+raised2(yVector));
    return output;
    }
    ]]>
    </msxsl:script>

主叫代码如下:

<xsl:value-of select="jsfuncs:getLineLength($x1,$x2,$y1,$y2)"/>

x1, x2……是之前设置的变量,它们是正确的。当我将值后处理为一个参数时,我可以使一切正常工作。是否有可能将xslt中的多个参数传递给Javascript?使用的引擎是msxml 3.0

下面是一个传入四个参数的例子:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ms="urn:schemas-microsoft-com:xslt"
    xmlns:mf="http://example.com/mf"
    exclude-result-prefixes="ms mf"
    version="1.0">
    <ms:script language="JScript" implements-prefix="mf">
        function test(a, b, c, d) {
          return a +  ":" + b + ":" + c + ":" + d;
        }
    </ms:script>
    <xsl:template match="/">
        <xsl:value-of select="mf:test(1, 2, 3, 'foo')"/>
        <br/>
        <xsl:variable name="item" select="root/item"/>
        <xsl:value-of select="mf:test(string($item/@a), string($item/@b), string($item/@c), string($item/@d))"/>
    </xsl:template>
</xsl:stylesheet>

如您所见,当希望将节点传递给期望原始值的函数时,我建议确保首先在XSLT端将其转换为原始值,如在mf:test(string($item/@a), string($item/@b), string($item/@c), string($item/@d))中所做的那样,否则函数将获得由您需要首先迭代的某些选择接口表示的节点集。

对于我来说,使用MSXML 3的示例工作得很好,并且在使用

运行输入示例时输出1:2:3:foo<br />1:2:3:whatever
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <item a="1" b="2" c="3" d="whatever"/>
</root>

相关内容

  • 没有找到相关文章

最新更新