在xsl中编码url的一部分

时间:2013-03-29 14:49:10

标签: html xml xslt

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

我是按照正确的方式走向正确的道路吗?有人能指出我如何获得编码的正确方向吗?在此先感谢您的帮助!

1 个答案:

答案 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>