Главная » XSLT » Модульность и режимы

0

Задача

Имеющиеся в XSLT 1.0 ограничения на использование режимов (атрибута mode) часто приводят к дублированию кода или лишней работе.

Решение

Пользуйтесь новыми, появившимися в XSLT 2.0 возможностями атрибута mode для устранения дублирования кода. Рассмотрим простую таблицу стилей, в которой один и тот же документ обрабатывается в два прохода с разными режи­мами. На каждом проходе по умолчанию текстовые узлы должны игнорировать­ся. В XSLT 1.0 пришлось бы написать что-то вроде:

<xsl:template match="text()" mode="mode1"/>

<xsl:template match="text()" mode="mode2"/>

А в версии 2.0 избыточность можно исключить:

<xsl:template match="text()" mode="mode1 mode2"/>

Или, если вы хотите обрабатывать все узлы:

<xsl:template match="text()" mode="#all"/>

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

Обсуждение

Пользуясь режимами в версии 2.0, я всегда стараюсь употреблять значение #current вместо явно поименованного режима, если требуется продолжать об­работку в текущем режиме:

<xsl:template match="author" mode="index"> <div class="author">

<xsl:apply-templates mode="#current"/> </div> </xsl:template>

У такого решения два очевидных достоинства. Во-первых, если позже вы со­чтете, что режим назван неудачно, то для изменения имени не нужно будет моди­фицировать каждое из обращений к xsl:apply-templates. Во-вторых, если понадобится добавить в шаблон новые режимы, все будет работать без каких бы то ни было изменений:

<xsl:template match="author" mode="index body"> <div class="author">

<xsl:apply-templates mode="#current"/>

</div> </xsl:template>

Мангано Сэл  XSLT. Сборник рецептов. – М.: ДМК Пресс, СПБ.: БХВ-Петербург, 2008. – 864 с.: ил.

По теме:

  • Комментарии