2010-10-11 6 views
4

Я ищу конкретный пример таблицы стилей XSL, хранящей текущий рабочий каталог в переменной.XSL, получить текущий рабочий каталог

Мне нужно это, потому что в моей ситуации мне нужно импортировать определенные таблицы стилей библиотеки, используя относительный путь. Знание пути, который мой процессор выбирает, поскольку текущий каталог будет достаточным.

EDIT

Ничего особенного продавца.

ответ

6

В XSLT 2.0 можно использовать стандартную функцию XPath 2.0 resolve-uri().

Обратите внимание, что относительные идентификаторы URI из включенных/импортируемых модулей таблиц стилей являются относительно базы URI в том числе/импортирующего модуль таблицы стилей - не из «рабочего каталога»!

Вот часть описания этой функции из W3 F спецификации & O:

8,1 Fn: разрешить URI-

Fn: решить-URI ($ относительно, как хз: string?) как xs: anyURI?

fn: resolve-uri ($ relative as xs: string ?, $ base as xs: string) как xs: anyURI?

Реферат: Назначение этой функции состоит в том, чтобы разрешить относительный URI быть , разрешенным против абсолютного URI.

Первая форма этой функции решает $ относительно по отношению к значению базового URI-собственности от статического контекста. Если свойство base-uri не инициализировано в статическом контексте , возникает ошибка [err: FONS0005].

Вот очень простой пример:

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:template match="/"> 
    <xsl:sequence select= 
    "resolve-uri('resolve-uri-example2.xsl')"/> 
</xsl:template> 
</xsl:stylesheet> 

когда это преобразование применяется в отношении любого XML-документа (не используется), то результат будет:

file:///c:/tests/resolve-uri-example2.xsl 

Это является правильным результатом, потому что наш основной файл таблицы стилей сохраняется как:

c:/tests/resolve-uri-example2.xsl 
+0

спасибо dimitre, не могли бы вы привести конкретный пример его использования для определения текущего пути. Я не вижу, как это сделать из документации – Mike

+1

@Mike: Да, я обновил свой ответ на примере. –

+0

Спасибо, dimitre, как всегда я ценю вашу тщательную помощь в решении моих проблем xslt. – Mike

2

В мире XSL нет гарантии, что существует абсолютная текущая рабочая директория или даже что понятие имеет смысл. Любой ответ на этот вопрос обязательно зависит от поставщика.

+0

@ Джим-Гарнисон: Собственно, ваш ответ в целом не соответствует действительности. –

+0

@ Dimitre: Не могли бы вы немного разобраться? –

+0

@ Jim-Garrison: То, что на самом деле спрашивает OP, - это * base-uri * модуля стилей xslt, а не рабочий каталог. –

Смежные вопросы