[英]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,其中包含“替換”模板
<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.