首先是一个简短的任务描述:
有一个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 and Settings / All Users / name_xsl.dll / ...时出错 或'file:/// C:/name_xsl.dll/frameset.xsl'
你可以帮帮我吗?为什么找不到该文件? (文件名是虚构的)答案 0 :(得分:1)
这是解决方案:
<?xml-stylesheet type='text/xsl' href='res://C:%5CDocuments and Settings%5CAll Users%5Cname_xsl.dll/frameset.xsl'?>
注意:
实施例: 我为file://协议测试了这个例子,但它的工作方式应该与res:protocol相同。在我的系统上,我有一个文本文件位于:
C:\Program Files\CodeGear\Delphi for PHP\2.0\privacy.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了解语法。