我试图在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>