我是xsl中的新手,所以我甚至不确定这是否可行。此代码用于构建一个回发到同一页面的菜单,以便可以从查询字符串中选取ITEMNMBR,并在构建订单时将其添加到网格中。某些项目编号中有特殊字符。
我有以下代码,需要对此URL的ITEMNMBR部分进行编码,以便在选择超链接时不会出现任何问题。
<xsl:for-each select="MenuItem">
<li><a href="OrderEntry.aspx?ITEMNMBR={ITEMNMBR}"><xsl:value-of select="ITEMNMBR"/></a></li> <!-- Inventory items --> <!-- need only encode itemnmbr -->
</xsl:for-each>
我是按照正确的方式走向正确的道路吗?有人能指出我如何获得编码的正确方向吗?在此先感谢您的帮助!
答案 0 :(得分:2)
如果您使用的是XSLT 2.0,则可以直接使用 encode-for-uri
<a href="OrderEntry.aspx?ITEMNMBR={encode-for-uri(ITEMNMBR)}">
如果您使用的是XSLT 1.0,可以使用某种形式的扩展功能,但这取决于您使用的是什么平台。如果您使用的是Mircosoft技术,则会提供 msxsl:script 元素,您可以使用该元素直接调用JavaScript函数。例如
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:js="madeup.uri" exclude-result-prefixes="msxsl js">
<xsl:output method="html"/>
<msxsl:script language="javascript" implements-prefix="js">
function uriencode(string)
{
return encodeURIComponent(string);
}
</msxsl:script>
<xsl:template match="/">
<xsl:for-each select="MenuItem">
<li>
<a href="OrderEntry.aspx?ITEMNMBR={js:uriencode(string(ITEMNMBR))}">
<xsl:value-of select="ITEMNMBR"/>
</a>
</li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>