xslt - 如何使用 XSLT 将节点集放入属性值中?

标签 xslt

我有一个 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, &apos;", $id, "&apos;, &apos;", $nodeid, "&apos;, &apos;", $instanceid, "&apos;)")' />
</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/

相关文章:

xslt - 从 DocBook 中的 'list of figures' 中删除引用

xml - XSLT或XPath可以处理空文件吗?

xslt - 根据条件使用 key() 选择节点

html - 参数和变量必须位于模板的顶部吗?

javascript - XSLT 和 MathJax

xml - 如何在XSLT中将所有标签从一个节点复制到另一个节点,而其他内容保持原样

xml - 如何使用 XSLT 对连续数字进行分组

xml - 在 xslt 中不带命名空间的条件复制

node.js - 根据接收器文件中的条件填充 Node

java - JAXP XSLT 转换器默认使用错误的实现