2012-01-27 2 views
1

Я пытаюсь повторно использовать XSL-шаблон и размещать другие шаблоны в этом шаблоне несколько раз.Повторное использование вложенных шаблонов XSL

Вот пример моего кода:

<xsl:template name="wrapper"> 
    <div> 
     <xsl:apply-templates/> 
    </div> 
</xsl:template> 

<xsl:template name="template1"></xsl:template> 
<xsl:template name="template2"></xsl:template> 

Итак, теперь я хочу, чтобы применить как шаблон 1 и шаблон 2 внутри шаблона «обертки», что-то вроде этого (я знаю, что это не правильный код , но идея есть):

<xsl:template name="template1"> 
    <xsl:template match="wrapper"> 
    <!--code here--> 
    </xsl:template> 
</xsl:template> 
<xsl:template name="template2"> 
    <xsl:template match="wrapper"> 
    <!--code here--> 
    </xsl:template> 
</xsl:template> 

Любая помощь по этому вопросу была бы оценена по-гречески.

+0

Это не то, как это работает. Что ты пытаешься сделать? Пожалуйста, поставьте некоторый входной XML и соответствующий желаемый результат. – Tomalak

+0

Я вижу края того, что вы пытаетесь достичь, но, как говорит @Tomalak, если у нас нет некоторых примеров, чтобы помочь нам понять, что мы не можем ответить каким-либо полезным способом – Murph

+0

Вы знаете « 'и тот факт, что вы можете« вложить »те, т. е. вызвать шаблон вызова внутри именованного шаблона, да? –

ответ

8

Синтаксически незаконно вложить определение шаблона в другое.

Согласно спецификации W3C XSLT (как 1.0 и 2.0), xsl:template должен быть дочерним элементом верхнего элемента xsl:stylesheet.

Это означает, что все шаблоны в модуле стилей должны быть братьями и сестрами.

Способ вызоваименованный шаблонявляется использование xsl:call-template инструкции, как этот:

<xsl:call-template name="someTemplateName"> 
<!-- Possibly place one or more `xsl:with-param` elements here --> 
</xsl:call-template> 

Однако beaware, что:

Это хороший стиль и более в духе XSLT использовать неназванные шаблоны (которые имеют атрибут match) и выбрать лучший шаблон соответствия с инструкцией xsl:apply-templates.

Большинство ответов на вопросы SO XSLT демонстрируют использование xsl:apply-templates.

+0

очень хороший ответ – Krishna

+0

@ Кришна: Добро пожаловать. –

0

Итак, теперь я хочу, чтобы применить как шаблон 1 и шаблон 2 внутри шаблона «обертка»,

Если я это буквально:

<xsl:template name="wrapper"> 
    <xsl:call-template name="template1" /> 
    <xsl:call-template name="template2" /> 
</xsl:template> 

Но у меня есть сильные кишки чувствуя, что ты как-то стреляешь в ногу здесь.

+0

Я делаю вещи с xml в шаблонах 1 и 2. Однако обертка не имеет ничего общего с xml. Идея заключается в следующем: ' <- код здесь -> ' Я очень новичок в XSL, и я начинаю верить, что использую его неправильно. Однако, если что-то подобное получится, это будет очень удобно. – Rinux

+5

@ Rinux: Вы все еще не говорите мне, что вы пытаетесь сделать. Это проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Вы пытаетесь сделать X и думаете, что Y может работать, поэтому вы спрашиваете о Y, но никогда не говорите, что такое X. Пожалуйста, дайте мне фактический XML для работы. – Tomalak

+0

Хорошо; ты прав. вот мой X: у меня есть некоторый контент, который обрабатывается с помощью PHP/XML и XLST. Я хочу, чтобы этот контент отображался в «обертке», которая представляет собой таблицу, содержащую изображения для теней. Почему бы не использовать CSS? Internet Explorer. Тем не менее, я сделал большой поиск, и я думаю, что нашел бы решение с чистым CSS. И, как я уже сказал, я думаю, что использовал XLST неправильно. В следующий раз я подумаю в X, а не в Y. Спасибо за вашу помощь! – Rinux