xslt将多个参数转换为javascript

时间:2016-08-10 12:05:01

标签: xslt xslt-1.0

我试图在xsl中的javascript中创建一个接受多个in-parameters的函数。我无法让它工作并得到以下错误:

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。

1 个答案:

答案 0 :(得分:0)

以下是传递四个参数的示例:

"name": "Aging",
"functions": [
  {
    "type": "freshness",
    "fieldName": "ExpiresOn",
    "boost": 10,
    "interpolation": "quadratic",
    "freshness": {
      "boostingDuration": "P14D"
    }
  },
}

正如您所看到的,当想要将节点传递给期望原始值的函数时,我建议首先确保将它在XSLT端转换为原始值,如ExpiresOn中所做的那样,否则,该函数将获得一个由您需要首先迭代的选择接口表示的节点集。

使用MSXML 3时,该示例适用于我,并且在使用

对输入样本运行时输出<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>
mf:test(string($item/@a), string($item/@b), string($item/@c), string($item/@d))