Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

<xsl:template match="home">

 <а href="#">www.xsltdev.ru</a>

</xsl:template>

При необходимости этот шаблон может быть переопределен. К примеру, ссылка может выглядеть как

Visit <а href="#">www.xsltdev.ru</a>

Соответственно, шаблон будет иметь вид

<xsl:template match="home">

 <xsl:text>Visit </xsl:text>

 <a href="#">www.xsltdev.ru</a>

</xsl:template>

Можно заметить, что оба шаблона имеют общую часть, которая выводит гипертекстовую ссылку. Эта часть может быть вынесена во внешнее преобразование

home.xsl
.

Листинг 5.18. Преобразование home.xml

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="home">

<a href="#">www.xsltdev.ru</a>

 </xsl:template>

</xsl:stylesheet>

Для того чтобы использовать внешний шаблон, основное преобразование должно импортировать его при помощи

xsl:import
и применять посредством xsl:apply-imports.

Листинг 5.19. Основное преобразование base.xsl

<xsl:stylesheet

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 version="1.0">

 <xsl:import href="#"/>

 <xsl:template match="home">

<xsl:text>Visit </xsl:text>

<xsl:apply-imports/>

 </xsl:template>

</xsl:stylesheet>

Элемент

xsl:apply-imports
нельзя использовать в блоках
xsl:for-each
и при вычислении глобальных переменных. Дело в том, что при обработке
xsl:apply-imports
процессор применяет импортируемые правила в соответствии с текущим шаблоном. Текущий шаблон — это то самое правило, которое процессор выполняет при обработке элемента
xsl:apply-templates
. При вычислении глобальных переменных и обработке блоков
xsl:for-each
текущее правило становится пустым, и, соответственно, вызов
xsl:apply-imports
вызовет ошибку.

Элемент

xsl:apply-imports
применяет шаблоны точно так же, как и элемент
xsl:apply-templates
, но при этом он имеет две особенности.

□ Шаблоны, определенные в основном преобразовании, применяться не будут, поскольку

xsl:apply-imports
применяет только импортированные правила.

□ Элемент

xsl:apply-imports
применяет только те правила, режим (
mode
) которых совпадает с режимом текущего шаблона.

В текущей версии XSLT

xsl:apply-imports
не может вызывать импортированные именованные шаблоны.

Для того чтобы лучше понять, зачем нужна такая сложная схема импорта, проведем аналогию с объектно-ориентированным программированием. Если рассматривать правила преобразований как методы классов, то импорт преобразований будет ни чем иным, как наследованием — все методы (шаблоны) класса-потомка (импортируемого преобразования) будут доступны в классе-наследнике (импортирующем преобразовании). При этом класс-наследник может переопределить методы класса потомка (шаблоны основного преобразования имеют порядок импорта старше, чем шаблоны импортированного преобразования). В этой схеме использование элемента

xsl:apply-imports
будет равносильно вызову метода родительского класса вместо переопределенного метода класса потомка.

Приведем пример Java-классов, которые будут аналогичны преобразованиям

home.xsl
и
base.xsl
.

Листинг 5.20. Класс home

public class home {

 public String home {

return "<a href=\"http://www.xsltdev.ru\">www.xsltdev.ru</a>";

 }

}

Листинг 5.21. Класс base

public class base extends home {

 public String home {

return ("Visit " + super.home);

 }

}

В этом примере вызов родительского метода

super.home
соответствует применению элементом
xsl:apply-imports
импортированного шаблона.

Тело шаблона

Фактически, элемент

xsl:template
, определяющий шаблонное правило, задает не более чем условия, при которых это правило должно выполняться. Конкретные же действия и инструкции, которые должны быть исполнены, определяются содержимым элемента
xsl:template
и составляют тело шаблона.

  • Читать дальше
  • 1
  • ...
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: