Элемент xsl:apply-imports

Элемент xsl:apply-imports

Синтаксис этого элемента:

<xsl:apply-imports/>

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

Пример

Предположим, что в преобразованиях часто используется шаблон, который заменяет элементы home ссылками на сайт http://www.xsltdev.ru:

<xsl:template match="home">

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

</xsl:template>

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

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

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

<xsl:template match="home">

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

 <a href="http://www.xsltdev.ru">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="http://www.xsltdev.ru">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="home.xsl"/>

 <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 импортированного шаблона.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Элемент

Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

Элемент <?job?> Элемент <?job?> задает режим отладки при выполнении WS-файла. Если значение атрибута debug равно true, то задание может быть выполнено во внешнем отладчике (см. приложение 3). Если же значение атрибута debug равно false, то отладчик для этого задания применен быть не


Элемент

Из книги XSLT автора Хольцнер Стивен

Элемент <job> Элементы <job> позволяют определять несколько заданий (независимо выполняющихся частей) в одном WS-файле. Иначе говоря, между тегами <job> и </job> будет находиться отдельный сценарий (который, в свою очередь, может состоять из нескольких частей,


Элемент

Из книги Технология XSLT автора Валиков Алексей Николаевич

Элемент <example> Внутри элемента <example> приводится текст из одной или нескольких строк, в котором можно описать примеры запуска сценария. Если сценарий был запущен с ключом /? в командной строке или в сценарии встретился вызов метода ShowUsage объекта WshArguments, то этот текст


Элемент

Из книги Как спроектировать современный сайт автора Вин Чои

Элемент <xsl:apply-templates> В уже написанном нами основном шаблоне корневой узел искался по выражению "/" и заменялся на элемент буквального вывода. Однако, когда мы ищем корневой узел, обычно нам нужно обработать и всю оставшуюся часть документа, что мы сделаем при помощи


Элемент

Из книги HTML, XHTML и CSS на 100% автора Квинт Игорь

Элемент <xsl:if> При помощи элемента <xsl:if> осуществляются проверки условия и принимаются действия на основе результата проверки. Он во многом похож на оператор if в языках программирования. У элемента <xsl:if> один атрибут:• test (обязательный). Устанавливается в


Элемент

Из книги автора

Элемент <xsl:for-each> Элемент <xsl:for-each> позволяет применять тело шаблона в цикле снова и снова для всех элементов набора узлов. С технической точки зрения, он работает с набором узлов, который возвращает выражение XPath и выполняет одно и то же действие с каждым узлом в


Элемент xsl:apply-imports

Из книги автора

Элемент xsl:apply-imports Синтаксис этого элемента:<xsl:apply-imports/>Элемент xsl:apply-imports можно использовать в шаблонах для применения правил, которые были импортированы во внешних модулях, но затем переопределены шаблонами основного преобразования.ПримерПредположим, что в


Элемент xsl:if

Из книги автора

Элемент xsl:if Синтаксис элемента следующий:<xsl:if test="выражение"> <!-- Содержимое: шаблон --></xsl:if>Элемент xsl:if является простейшим условным оператором в XSLT. Выражение, содержащееся в обязательном атрибуте test, вычисляется и приводится к булевому типу. В том и только том


Элемент

Из книги автора

Элемент Элементы – это любые единичные компоненты структуры, например, заголовок, абзац текста, фотография или


Элемент

Из книги автора

Элемент Основой языка HTML является элемент. Он несет в себе определенную информацию, может описывать документ в целом или способ форматирования текста. Элементы можно назвать основой построения сайта. Все, что вы захотите создать на вашей странице, будет сделано с помощью