我试图在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。
答案 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))