0

我是 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>

我是否正朝着正确的方向前进?有人可以为我指出如何编码的正确方向吗?提前感谢您的帮助!

4

1 回答 1

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>
于 2013-03-29T15:41:42.090 回答