首先是一个简短的任务描述:
有一个XML文件引用了*.dll中的xsl样式表。该XML的开头如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href='res://name_xsl.dll/frameset.xsl'?>
此xml文件可以在Internet Explorer中打开并显示为HTML,并且只能显示为IE。(xsl将xml转换为html)
如您所见,它引用win32系统文件夹,dll文件保存在该文件夹中。引用"res://"确实有效。
但现在我不想将dll存储在系统文件夹中,而是在不同的文件夹下,比如%ALLUSERSPROFILE%(环境变量),例如在Windows XP上是C:\Documents and Settings\All Users或在Win7 C:\Users\Public上(不确定)。
如何引用该文件夹中的dll?是否可以使用环境变量来实现这一点,从而使其与系统无关?你推荐什么解决方案。(所有html、xsl数据都保存在本地计算机的dll中。)
到目前为止,我已经尝试将参考线更改为以下内容:
<?xml-stylesheet type='text/xsl' href='file:///c:/Documents and Settings/All Users/name_xsl.dll/frameset.xsl'?>
我也在根文件夹c:中尝试过同样的方法,即使没有绝对路径,所有文件(xml和dll)都在同一个文件夹中。所有没有res://的尝试都会导致以下错误消息:
系统找不到指定的资源。处理资源时出错file:///C:/Documents和设置/所有用户/name_xsl.dll/。。。或'file:///C:/name_xsl.dll/frameset.xsl'
你能帮我吗?为什么找不到文件?(文件名是虚构的)
这就是解决方案:
<?xml-stylesheet type='text/xsl' href='res://C:%5CDocuments and Settings%5CAll Users%5Cname_xsl.dll/frameset.xsl'?>
注:
- 您必须使用res://协议来访问文件中的资源
- 文件系统反斜杠可以编码为%5C。可能前斜线也会起作用
示例:我为file://协议测试了这个例子,但它应该以与res:protocol相同的方式工作。在我的系统上,我有一个文本文件位于:
C:Program FilesCodeGearDelphi for PHP2.0privacy.txt
我可以访问这个文件,通过放入Windows文件资源管理器的导航栏:
file:///%ProgramFiles%/CodeGear/Delphi for PHP/2.0/privacy.txt
请注意,反斜杠已转换为正斜杠,并且不需要转义空格。这已经过测试并且有效。res协议上的等效协议尚未经过测试,但它应该以相同的方式工作,当然,res协议略有不同,因为它还包括一个资源索引号。
请参阅http://msdn.microsoft.com/en-us/library/ie/aa767740(v=vs.85).aspx获取语法信息。