3

首先是简短的任务描述:

有一个 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 和仅 IE 中打开并显示为 HTML。(xsl 将 xml 转换为 html)

如您所见,它引用了保存 dll 文件的win32 系统文件夹。使用“res://”引用确实有效。

但是现在我不想将我的 dll 存储在系统文件夹中,而是在另一个文件夹下可以说 %ALLUSERSPROFILE% (环境变量),例如在 Windows XP 上是 C:\Documents and Settings\All Users 或在 Win7 C:\用户\公共(不确定那个)。

如何引用该文件夹中的 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'

你能帮帮我吗?为什么找不到文件?(文件名是虚构的)

4

1 回答 1

1

这是解决方案:

<?xml-stylesheet type='text/xsl' href='res://C:%5CDocuments and Settings%5CAll Users%5Cname_xsl.dll/frameset.xsl'?>

笔记:

  1. 您必须使用 res:// 协议来访问文件中的资源。
  2. 文件系统反斜杠可以编码为 %5C 。可能正斜杠也会起作用。

示例:我针对 file:// 协议测试了这个示例,但它的工作方式应该与 res: 协议相同。在我的系统上,我有一个文本文件位于:

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

于 2012-02-21T23:05:01.990 回答