Я думаю, у меня была более или менее та же проблема, что и у вас. У меня был «внешний» шаблон, и я хотел вызвать другой «внутренний» шаблон в зависимости от некоторой переменной, установленной во время выполнения. Я нашел ваш вопрос от Google, чтобы получить динамический <xsl:call-template>
. Я решил это с помощью <xsl:apply-templates>
вместо этого следующим образом.
Входной XML (генерируемый во время выполнения) содержит что-то вроде:
<template name="template_name_1"/>
XSL во "внешнем" шаблоне имеет:
<xsl:apply-templates select="template"/>
(select="template"
в этом шаблоне применения относится к тегу <template>
во входном XML)
И, наконец, «внутренний» шаблон, который я хотел включить в результате значения атрибута name
в моем XML, выглядит следующим образом:
<xsl:template match="template[@name='template_name_1']">
<!-- XSL / XHTML goes here -->
</xsl:template>
(Опять же, match="template[@name='xyz']"
относится к предыдущему select="template"
и, в свою очередь, к тегу <template>
и его атрибуту name
во входном XML)
Таким образом, я могу иметь динамически «вызываемый» шаблон, просто контролируемый из моего входного XML.
Возможно, это не та проблема, которую вы пытаетесь решить, но я думаю, что она довольно близка и намного проще, чем решения FSXL, упомянутые в другом месте на этой странице.