Локальная XSL-ссылка в XML-файле - PullRequest
3 голосов
/ 21 февраля 2012

Сначала краткое описание задачи:

Существует файл XML, который ссылается на таблицу стилей xsl, которая находится внутри * .dll. Начало этого XML выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type='text/xsl' href='res://name_xsl.dll/frameset.xsl'?>

Этот XML-файл можно открыть и отобразить в виде HTML в Internet Explorer и только в 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 / Все пользователи / name_xsl.dll / ... или 'file: /// C: /name_xsl.dll/frameset.xsl'

Не могли бы вы мне помочь? Почему он не находит файл? (имена файлов вымышленные)

1 Ответ

1 голос
/ 22 февраля 2012

Это решение:

<?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.

...