XSL 1.0
От: fk0 Россия https://fk0.name
Дата: 08.02.23 12:07
Оценка:
Немедленно нажми на RESET, All!

Я правильно понимаю, что в XSL 1.0 нет возможности, например, реализовать что-то вроде функции?

Если кратко; хочется в шаблон передать параметром шаблона другой шаблон, который этот шаблон
параметризирует вычисленными из текущего узла значениями и вызовет.

Например, во входном документе есть элементы, над которыми хочется провести вычисления и получить
ряд переменных, которые передать параметром в заданный шаблон. В один, другой, третий, пятый,
десятый. И вот это всё тоже должно быть, стало быть, шаблоном. Но в XSL 1.0 невозможно шаблон
сделать параметром шаблона, т.к. параметр name в xsl:call-template не может быть переменной,
а должен быть непосредственным значением.

Есть известный способ выкрутиться, вместо call-template использовать apply-templates и
задать параметром select="document('')/*/template[@name='$param']". Но получается, что содержимое
выбранного таким образом темплейта будет интерпретироваться как текст и узлы из xsl там не
будут обрабатываться. Да вообще любые узлы. По крайней мере так получается в xsltproc.

По-моему эта проблема имеет тесное отношение к другой: мол как применить шаблон к уже
сгенерированному результату преобразования. Например, через xsl:copy. Тоже никак. И здесь
такая-же история.

Я знаю, что в XSLT 2.0 и других процессорах есть миллион разных способов, но пользуясь чистым
XSLT 1.0 остаётся только разве что, в шаблоне-функции, из которой хочется вызвать другой шаблон,
в конце писать гигантский xsl:choose и там выбирать какую конкретно функцию вызвать, в зависимости
от входного параметра. Я правильно понимаю?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.