В 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
спасибо dimitre, не могли бы вы привести конкретный пример его использования для определения текущего пути. Я не вижу, как это сделать из документации – Mike
@Mike: Да, я обновил свой ответ на примере. –
Спасибо, dimitre, как всегда я ценю вашу тщательную помощь в решении моих проблем xslt. – Mike