Xpath没有正确读取参数?

时间:2015-09-08 14:46:37

标签: javascript xslt xpath svg

当我调用它时(通过参数),我试图将一个Javascript中的变量发送到XSLT模板。

我从JavaScript调用模板,我似乎能够很好地发送变量,但出于某种原因,当我尝试在xpath表达式中使用该变量时,它不起作用

使用Javascript:

var children = document.getElementsByTagName("rect");

for (var i = 0; i < children.length; i++) {
    children[i].addEventListener("click", function() { onElementClick(this.id); }, false);
}

function onElementClick(id) {
    console.log(id);
    console.log(<xsl:call-template name='getData'><xsl:with-param name='id'>id</xsl:with-param></xsl:call-template>);
}

以上是我的代码。如您所见,它获取一个SVG元素(rect)并在单击矩形时将id发送给函数。然后它必须调用一个函数来获取与该矩形ID相关联的xml数据。

XSL:

<xsl:template name="getData">
    <xsl:param name="id"/>
    <xsl:value-of select="//*[id[text() = $id]]"/>
</xsl:template>

输出是这样的:

  

日志:BUS-0015
  LOG:

第一个输出javascript id,第二个输出xpath表达式结果。我知道xpath表达式是正确的,因为如果我在模板中手动设置一个具有完全相同文本的变量,它会找到预期的数据。我想它可能是如何将它传递到xsl模板中的?但是当我更改代码以便它只返回传入的参数的值时,它会打印出与之前的console.log(id)完全相同的东西。

1 个答案:

答案 0 :(得分:0)

在执行JavaScript + XSLT时,最好查看Sarissa。它比使用浏览器的XSLT处理器轻松进行XSLT处理更薄。在示例页面上,它是demonstrated how to set parameters

此外,在您的代码段中,它是模板的参数。从浏览器设置样式表参数意味着设置全局参数。为了调用入口点,这没什么区别,但为了实现这一点,您需要在根级别声明参数xsl:param