繁体   English   中英

从XSL传递文件路径到JavaScript函数

[英]Passing a file path from XSL to JavaScript Function

我试图将文件夹路径从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。

提前致谢。

确保您转义所有\\字符。 当在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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM