以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  怎么把文件路径中的“\”不丢失的传给javascript函数呢?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=67551)


--  作者:e_jsjszg
--  发布时间:9/22/2008 7:21:00 PM

--  怎么把文件路径中的“\”不丢失的传给javascript函数呢?
xml文件为:
<Filelist>
    <File Path="e:\folder1\file1.txt" CompareFile="e:\basefile\folder1\file1.txt" />
    <File Path="e:\folder1\file2.txt" CompareFile="e:\basefile\folder1\file2.txt" />
</Filelist>

xsl文件:
<a href="javascript:">
    <xsl:attribute name="onclick">
        var   oShell   =   new   ActiveXObject("WScript.Shell");   
        oShell.Run("\"C:\\Program Files\\Beyond Compare 2\\bc2.exe\" <xsl:value-of select='@Path'/>   <xsl:text>  </xsl:text> <xsl:value-of select='@CompareFile'/> ");   
    </xsl:attribute>
    Compare the files
</a>

用xsl文件解析,并调用BeyondCompare工具比较两个文件
可是,传入runExe函数的参数中文件路径@Path 和@CompareFile的“\”丢失了。用translate将“\”替换成“\\”也没用:
<xsl:variable name="file1" select="translate(@Path,'\','\\')"/>
<xsl:variable name="file2" select="translate(@CompareFile,'\','\\')"/>
<a href="javascript:">
    <xsl:attribute name="onclick">
        var   oShell   =   new   ActiveXObject("WScript.Shell");   
        oShell.Run("\"C:\\Program Files\\Beyond Compare 2\\bc2.exe\" <xsl:value-of select='$file1'/>   <xsl:text>  </xsl:text> <xsl:value-of select='$file1'/> ");   
    </xsl:attribute>
    Compare the files
</a>

不知道是什么原因,怎么处理呢?

谢谢!!


--  作者:Qr
--  发布时间:9/22/2008 7:51:00 PM

--  
<xsl:value-of select='@Path'/>得到的是完整的文件路径,也就是说此时“\”并没有丢失,丢失的原因是因为javascript,所以你的XML中Path的路径需要使用“\\”,才能避免。
另外你没理解translate的用法,translate(@Path,'\','\\')并不会将'\'替换成'\\',反而是删除'\',因为translate()后两个参数中有相同字符,要想translate()实现替换功能,除非是第2、3个参数分别是相应的大小写字母。所以你别指望translate()能帮你将'\'替换成'\\'。如果不想修改XML,而通过XSL实现,除非你用XPath中的字符串处理函数,将Path拆分然后加入一个“\”并重新组合。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms