У меня есть шаблон 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 с одним измерением и элементом. Моя строка похоронена там, но недоступна: - (.
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>