我有一个 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>
我的问题是调用模板返回一个节点集并且属性值希望是一个字符串。我似乎找不到任何方法将节点集转换为有效的字符串。
我尝试将行的值更改为:
<xsl:value-of select="$onClickJavaScript/text()" />
但它提示它需要返回一个节点集,但事实并非如此(这正是我所希望的,没有提示部分)。
在 Visual Studio 调试器中,我可以看到 $onClickJavaScript 是一个具有单个维度和项目的 NodeSet。我的字符串埋在那里,但无法访问:-(。
更新...
当我调用我的模板时,它会通过一个大的 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>
最佳答案
根据提供的信息,您的第一个示例应该可以工作,即
<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>
关于xslt - 如何使用 XSLT 将节点集放入属性值中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4196679/