确保您正在转义所有\
字符。在 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
用单个字符替换单个字符。
如果您使用的是 XSLT 2.0,那么我相信您可以做到这一点(w3.org 参考)...
<xsl:value-of select="replace(SOURCE/I/@DP,'\\','\\\\'")/>
的原因\\
是第二个和第三个参数是正则表达式,所以需要\
转义。
如果您使用的是 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>