xslt

Шаблоны в XSLT

XSLT — это прежде всего преобразование входного документа. Логика преобразования базируется на принципе шаблонной подмены.

Использование шаблонов в xslt

Есть исходное дерево документа. Процессор проходит каждый узел и прогоняет его через шаблоны. Если какой-то шаблон срабатывает, т.е. есть совпадение по match, то происходит замена узла в дереве документа на то, что находится внутри тела шаблона. Если шаблон не срабатывает, просматривается следующее правило.

Если ни одно правило match не сработало, узел считается необработанным, и он копируется процессором на выход. Но обычно делают так, чтобы преобразование затронуло все узлы. Для этого используют 2 способа (см. предыдущую статью).

Рассмотрим саму конструкцию шаблона:

<xsl:template name="name" match="pattern" mode="mode" priority="number">
   <!-- content:(<xsl:param>*,template) -->
</xsl:template>

У шаблона есть свойства:

  • Имя — имя шаблона.
  • Совпадение match — по нему ищется совпадение.
  • mode режим работы — управляет последовательностью обработки шаблонов. Это строка текста. В стандартных условиях процессор его не замечает. Можно задать свой любой режим и сказать процессору, выполняй только шаблоны с этим режимом (все остальные шаблоны будут отброшены).
  • priority приоритет — управляет последовательностью обработки шаблонов. Т.е. шаблоны сортируются в порядке приоритета (по числам), и по новому порядку выполняются. Если одинаковый приоритет у шаблонов — выполнение в том порядке, как они написаны в коде. Если приоритет не определен — выполнение шаблонов, как они написаны в коде по порядку.

Есть два способа написания шаблона: поименованный и на совпадение. Обычно использут либо template name, либо template match. Разница между ними: если стоит match — шаблон срабатывает автоматически, если name — процессор самостоятельно этот шаблон не применяет, он ждет вашей команды (получается что-то типа вызова функии, как в php).

Внутри шаблона стоит его контент. Внутри тела могут быть другие инструкции xslt и то, чем он должен заменить узел документа.

Конструкция apply-templates

Это xslt оператор. Его логика — а теперь еще раз примени шаблоны (команда обработчику). Т.е. допустим, шаблон 1 раз сработал на что-то (заменил узел документа на тело шаблона). Но у узла может быть какая-то вложенная инструкция. И мы даем команду обработчику: а теперь еще раз прогони все шаблоны. И теперь обработчик заменяет по match каждую вложенную конструкцию данного узла.

Конструкцию записывают так:

<xsl:apply-templates select="expression" mode="name">
   <!-- content:(xsl:sort | xs:with-param)* -->
</xsl:apply-templates>

В данной конструкции используют атрибут select (необязательный). В нем пишем указание — какие узлы обработать еще раз. Если select не писать, будет выполняться любая вложенная инструкция внутри текущего узла.

Т.к. в apply-templates можно сделать выборку нужных вам шаблонов и заново прогнать все шаблоны вашего преобразования.

В XSLT есть еще конструкция — xsl:import. Она позволяет в один файл преобразования подключить другие шаблоны:

<xsl:import href="http://phpmove.ru/templates.xsl"/>;

Именованные шаблоны

В таком шаблоне вместо конструкции match стоит имя — name. И он срабатывает не автоматически, а только, когда его вызовут по имени. А вызвать его можно через call-template. Рассмотрим синатаксис:

<xsl:template name="fruit">
   <!-- content -->
</xsl:template>
<!-- вызов шаблона -->
<xsl:call-template name="fruit"/>



Добавить комментарий

Ваш e-mail не будет опубликован.