Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Как вызвать шаблон с именем в переменной


Автор: Rigel 7.12.2008, 16:12
Нужно вызвать шаблон, имя которого заранее неизвестно. Когда вызываешь:
Код

<xsl:template name="page_content">
            <xsl:call-template name="view_admin_menu"/>
    </xsl:for-each>
</xsl:template>

то все нормально. Беда только в том, что шаблон привязан к модулю, а модуль может быть вставлен в страницу любой. Имя модуля (совпадает с именем шаблона) берется из XML. Делаю так:
Код

<xsl:template name="page_content">
    <xsl:for-each select="/rigel/page/page_template/modules/*">
        <xsl:variable name="curr_module" select="name()"/>
            <xsl:call-template name="Здесь нужно указать имя"/>
        <xsl:value-of select="$curr_module"/>
    </xsl:for-each>
</xsl:template>

Как вызвать шаблон, имя которого лежит в переменной? Я понимаю, что можно через template-match, но не получается вызвать его в нужном месте общего шаблона.

Автор: sir_nuf_nuf 7.12.2008, 19:45
Цитата(Rigel @  7.12.2008,  16:12 Найти цитируемый пост)
Как вызвать шаблон, имя которого лежит в переменной? 

насколько я выяснил никак.

что вы понимаете под "модулем" ?

Цитата

<xsl:variable name="curr_module" select="name()"/>

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

<xsl:template match="a/b[@x=1]"/>

тогда этот шаблон будет применен ко все элементам входного XML, которые удовлетворяют xpath условию a/b[@x=1]

Заметьте, что вызываемый шаблон зависит от XML, а не от XSD документа

Автор: Rigel 7.12.2008, 21:07
Под модулем я понимаю часть двигателя сайта. Через неименованные шаблоны я все сделал, хотя, как мне представляется, именованные были бы нагляднее и удобнее, впрочем, и так хорошо получилось. Спасибо за помощь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)