XML文件中的本地XSL引用



首先是一个简短的任务描述:

有一个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'?>

注:

  1. 您必须使用res://协议来访问文件中的资源
  2. 文件系统反斜杠可以编码为%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获取语法信息。

相关内容

  • 没有找到相关文章

最新更新