В таблице стилей XSL я пытаюсь использовать функцию document () с относительным путем к файлу XML (что должно быть возможно, если я правильно понимаю спецификации XSLT), но по какой-то причине это не кажется загрузить файл. Тот же код, использующий абсолютный URI, работает как положено. Файл XML, который я пытаюсь загрузить, находится в той же папке, что и таблица стилей.
Вопрос в том, упускаю ли я что-то в отношении того, как функция document () в синтаксическом анализаторе Coldfusion 8 XSLT разрешает относительные пути? Я использую XmlTransform для вызова синтаксического анализатора XSLT в моем компоненте CF.
Структура папок (упрощенная, docroot = домен, например, http://www.example.com/):
docroot/html/xsl/stylesheet.xsl
docroot/html/xsl/translations.xml
docroot/backend.cfc
XSLT, вызывающий функцию документа:
<h1>We should have hello after this text</h1>
<xsl:for-each select="document('translations.xml')">
<h2>hello</h2>
</xsl:for-each>
<h1>We should have hello before this text</h1>
В приведенном выше коде, если я заменю document('translation.xml')
на document('http://www.example.com/html/xsl/translation.xml')
, код будет работать как положено. Однако я бы хотел избежать жесткого кодирования домена в операторе, поскольку он делает таблицу стилей менее переносимой.
XML, который я пытаюсь загрузить:
<?xml version="1.0" encoding="utf-8"?>
<translations>
<fi>
<insured>Vakuutettu</insured>
</fi>
<se>
<insured>Försäkrad</insured>
</se>
</translations>
Код в компоненте ColdFusion backend.cfc, который запускает синтаксический анализатор XSL:
...
<cfoutput>#XmlTransform(obj, xsltProductTable04, xslParameters)#</cfoutput>
...
xsltProductTable04 - это переменная, которая указывает на загружаемую таблицу стилей, и имеет значение html/xsl/stylesheet.xsl
. Может ли иметь значение, что я загружаю таблицу стилей, используя URI относительно компонента cfc?
Обновление
По предложению Димитра Новатчева я пытался поэтапно удалять все разделы URL (например, /html/xsl/translation.xml, /xsl/translation.xml и т. Д.), Но ни одна из комбинаций не работает. Даже пробовал альтернативно с и без косой черты в начале URL.
Обновление 2
Мой текущий способ решения этой проблемы - создать абсолютный URL-адрес вне таблицы стилей, а затем передать его в качестве аргумента в таблицу стилей. Это работает, и в моем текущем проекте действительно оказывается лучшее решение, потому что оно позволяет мне упростить XSL, поскольку мне больше не нужно заботиться о выборе правильного языка внутри XSL. Но это все еще только обход оригинальной проблемы. Если у кого-то есть дополнительная информация о том, почему CF ведет себя так, как он, то я буду рад это услышать.