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 テクノロジを使用している場合は、JavaScript 関数を直接呼び出すために使用できるmsxsl:script要素が提供されます。例えば

<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 に答える