0

XSLからJavaScriptにフォルダーパスを渡そうとしています。関数はJavaScriptにあり、その関数はXSLのHTMLボタンのonClickボタンで呼び出されます。パスは「C:\ ABC \ DEF\GH」のようなものです。アラートを送信しているときに、パスが「CABCDEFGH」のように送信されているのを確認しました。すべてのスラッシュが削除されます。OnClickイベントの関数呼び出しを削除し、ハードコードされたパスでアラートをそこに配置しただけでも、同じことです。それはすべてのスラッシュを削除しました。

<img class="viewcls" src="images/copy.jpg" title="Copy Profile" onclick="fnCopyProfile({$CurlDPID},'{@T}','{SOURCE/I/@DP}')"/>

ここで、fnCopyProfile関数の最後のパラメーターの最後のパラメーターはXPathであり、その値はC:\ ABC \ DEF\GHのようなファイルパスになります。JSでは、スラッシュなしで登場します。

XSL自体に次のようにアラートを入れても:

<img class="viewcls" src="images/copy.jpg" title="Copy Profile" onclick="alert('{SOURCE/I/@DP}');fnCopyProfile({$CurlDPID},'{@T}','{SOURCE/I/@DP}')"/>

また、スラッシュなしのパスを示しています。

しかし、私がこれをしている場合:

<xsl:value-of select="SOURCE/I/@DP" />

スラッシュでパスを示していますが、このようにJSに値を渡すことはできません。

スラッシュ付きの正確なパスをJavaScriptに送信する方法。

前もって感謝します。

4

1 に答える 1

0

\すべての文字をエスケープしていることを確認してください。JavaScript文字列で使用される場合\、制御文字を示すために使用されます(\n改行など)。

したがって、必要なのは、すべての\文字を。に置き換えることです\\

使用しているインライン変数を使用してこれをどのように行うかはわかりません(Dimitreが表示してくれることを願っています)。

しかし、あなたはこのようにそれを行うことができます...

<img class="viewcls" src="images/copy.jpg" title="Copy Profile">
  <xsl:attribute name="onclick">fnCopyProfile(<xsl:value-of select="$CurlDPID"/>,'<xsl:value-of select="@T"/>','<xsl:value-of select="translate(SOURCE/I/@DP,'\','\\')"/>');</xsl:attribute>
</img>

アップデート

上記はtranslate、1文字を1文字に置き換えることで機能するため、機能しません。

XSLT 2.0を使用している場合は、これを実行できると思います(w3.orgリファレンス)...

<xsl:value-of select="replace(SOURCE/I/@DP,'\\','\\\\'")/>

その理由は\\、2番目と3番目のパラメーターが正規表現であるため、\エスケープする必要があるためです。

XSLT 1.0を使用している場合は、「検索と置換」テンプレートを提供するこの投稿をGoogleで見つけました。

<xsl:template name="string-replace-all">
  <xsl:param name="text" />
  <xsl:param name="replace" />
  <xsl:param name="by" />
  <xsl:choose>
    <xsl:when test="contains($text, $replace)">
      <xsl:value-of select="substring-before($text,$replace)" />
      <xsl:value-of select="$by" />
      <xsl:call-template name="string-replace-all">
        <xsl:with-param name="text"
        select="substring-after($text,$replace)" />
        <xsl:with-param name="replace" select="$replace" />
        <xsl:with-param name="by" select="$by" />
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$text" />
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

あなたはこのように呼び出すことができるはずです(私はそれをより明確にするために変数に入れました)...

<xsl:variable name="mypath">
  <xsl:call-template name="string-replace-all">
    <xsl:with-param name="text"><xsl:value-of select="SOURCE/I/@DP"/>
    <xsl:with-param name="replace">\</xsl:with-param>
    <xsl:with-param name="by">\\</xsl:with-param>
  </xsl:call-template>
</xsl:variable>
<img class="viewcls" src="images/copy.jpg" title="Copy Profile">
  <xsl:attribute name="onclick">fnCopyProfile(<xsl:value-of select="$CurlDPID"/>,'<xsl:value-of select="@T"/>','<xsl:value-of select="$mypath"/>');</xsl:attribute>
</img>
于 2012-07-25T13:24:07.977 に答える