簡體   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