我有一个xsl模板,我想调用它来放入HTML节点属性:
<xsl:variable name="onClickJavaScript">
<xsl:call-template name="GetOnClickJavaScript" />
</xsl:variable>
<a id="123">
<xsl:attribute name="onclick">
<xsl:value-of select="$onClickJavaScript" />
</xsl:attribute>
</a>
我的问题是call-template返回一个节点集,属性值想成为一个字符串。我似乎找不到任何方法将节点集转换为有效的字符串。
我尝试将行值更改为:
<xsl:value-of select="$onClickJavaScript/text()" />
但它抱怨它需要返回一个节点集而不是(这是我希望的,没有抱怨的部分)。
在Visual Studio调试器中,我可以看到$ onClickJavaScript是一个具有单个维度和项目的NodeSet。我的字符串埋在那里,但无法访问: - (。
... UPDATE
当我调用我的模板时,它会通过一个大的case语句并调用另一个模板。这个其他模板有一个<xsl:choose>
,在这种情况下它会跟随以下路径:
<xsl:when test="$isPrimary='true'">
<!-- Just provide the onclick event JavaScript -->
<xsl:value-of select='concat($launchMethod, "(this, '", $id, "', '", $nodeid, "', '", $instanceid, "')")' />
</xsl:when>
答案 0 :(得分:2)
根据提供的信息,您的第一个样本应该有效,即
<xsl:attribute name="onclick">
<xsl:value-of select="$onClickJavaScript" />
</xsl:attribute>
应插入onclick
属性,其中(字符串)值为$onClickJavaScript
。
您甚至可以使用attribute value template:
来简化您的XSLT<a id="123" onclick="{$onClickJavaScript}">...</a>
或者去除变量并在属性节点内调用模板:
<xsl:attribute name="onclick">
<xsl:call-template name="GetOnClickJavaScript" />
</xsl:attribute>
答案 1 :(得分:1)
我的问题是呼叫模板 返回节点集和属性 value想成为一个字符串。我不能 似乎找到了改变的方法 节点设置为有效的字符串。
问题在于您未展示的代码。
事实上,我根本无法重现这个问题。
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="onClickJavaScript">
<xsl:call-template name="GetOnClickJavaScript" />
</xsl:variable>
<xsl:variable name="onClickJavaScript2">
<xsl:call-template name="GetOnClickJavaScript2" />
</xsl:variable>
<a id="123">
<xsl:attribute name="onclick">
<xsl:value-of select="$onClickJavaScript" />
</xsl:attribute>
</a>
<a id="123456">
<xsl:attribute name="onclick">
<xsl:value-of select="$onClickJavaScript" />
</xsl:attribute>
</a>
</xsl:template>
<xsl:template name="GetOnClickJavaScript">Hello</xsl:template>
<xsl:template name="GetOnClickJavaScript2">
<a>Hello</a>
</xsl:template>
</xsl:stylesheet>
应用于任何XML文档(未使用)时会产生没有任何错误的输出:
<a id="123" onclick="Hello"/>
<a id="123456" onclick="Hello"/>
答案 2 :(得分:1)
我也无法重现这一点......这就是我尝试过的,on上点击a获取“foo(this,'3','test')”。还有什么不同?您尝试调用xsl:value-of on?
的结果树片段是什么<xsl:template match="/">
<xsl:variable name="onclick-val">
<xsl:call-template name="foo" />
</xsl:variable>
<a>
<xsl:attribute name="onclick">
<xsl:value-of select="$onclick-val" />
</xsl:attribute>
</a>
</xsl:template>
<xsl:template name="foo">
<xsl:choose>
<xsl:when test="false()">
false
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="callme" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="callme">
<xsl:choose>
<xsl:when test="true()">
<xsl:value-of select='concat("foo", "(this, '", "3", "', '", "test", "')")' />
</xsl:when>
<xsl:otherwise>
false
</xsl:otherwise>
</xsl:choose>
</xsl:template>