\
すべての文字をエスケープしていることを確認してください。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>