簡體   English   中英

XSLT參數在javascript塊中返回了錯誤的值

[英]XSLT param returns incorrect value in javascript block

我正在傳遞參數值作為目錄說c:\\ MyFolder \\ myfile.txt。

但是,當我在javascript塊中收到該值時,它將返回值c:MyFolderMyfile.txt

如何在javascript塊中獲得相同的param值?

碼:

<xsl:param name="ResourcePath"/>
<xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>    
        <script type="text/javascript">
           alert('<xsl:value-of select="$ResourcePath"/>');
           //It shows value c:MyFolderMyfile.txt but I want c:\MyFolder\myfile.txt
        </script>
      </head>
      <body> </body>
    </html>
  </xsl:template>

您需要在$ResourcePath轉義斜線。 將文本c:\\MyFolder\\myfile.txt替換為c:\\\\MyFolder\\\\myfile.txt

JavaScript將字符串中的\\解釋為轉義字符。 由於斜杠后跟一個m ,導致無效的轉義序列,因此它僅呈現m而不是\\m

為了使它可以在JavaScript中工作,而不是輸出它...

alert('c:\MyFolder\myfile.txt');

您需要輸出此

alert('c:\\MyFolder\\myfile.txt');

不幸的是,XSLT 1.0沒有“替換”功能,因此您將不得不使用遞歸模板將\\替換為\\\\

快速搜索StackOverflow可以找到以下示例:

XSLT字符串替換

嘗試此XSLT,其中包含“替換”模板

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output omit-xml-declaration="yes" indent="yes" />
   <xsl:param name="ResourcePath" select="'c:\MyFolder\myfile.txt'"/>
   <xsl:template match="/">
     <html xmlns="http://www.w3.org/1999/xhtml">
       <head>    
         <script type="text/javascript">
            <xsl:text>alert('</xsl:text>
        <xsl:call-template name="string-replace-all">
               <xsl:with-param name="text" select="$ResourcePath" />
               <xsl:with-param name="replace" select="'\'" />
               <xsl:with-param name="by" select="'\\'" />
            </xsl:call-template>
            <xsl:text>');</xsl:text>
         </script>
       </head>
       <body> </body>
     </html>
   </xsl:template>

   <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:stylesheet>

這應該輸出以下內容

<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <script type="text/javascript">alert('c:\\MyFolder\\myfile.txt');</script>
   </head>
   <body/>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM