Элемент 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 импортированного шаблона.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Элемент
Элемент Основой языка HTML является элемент. Он несет в себе определенную информацию, может описывать документ в целом или способ форматирования текста. Элементы можно назвать основой построения сайта. Все, что вы захотите создать на вашей странице, будет сделано с помощью
Элемент
Элемент Элементы – это любые единичные компоненты структуры, например, заголовок, абзац текста, фотография или
Элемент <xsl:apply-templates>
Элемент <xsl:apply-templates> В уже написанном нами основном шаблоне корневой узел искался по выражению "/" и заменялся на элемент буквального вывода. Однако, когда мы ищем корневой узел, обычно нам нужно обработать и всю оставшуюся часть документа, что мы сделаем при помощи
Элемент <xsl:if>
Элемент <xsl:if> При помощи элемента <xsl:if> осуществляются проверки условия и принимаются действия на основе результата проверки. Он во многом похож на оператор if в языках программирования. У элемента <xsl:if> один атрибут:• test (обязательный). Устанавливается в
Элемент <xsl:for-each>
Элемент <xsl:for-each> Элемент <xsl:for-each> позволяет применять тело шаблона в цикле снова и снова для всех элементов набора узлов. С технической точки зрения, он работает с набором узлов, который возвращает выражение XPath и выполняет одно и то же действие с каждым узлом в
Элемент <?job?>
Элемент <?job?> Элемент <?job?> задает режим отладки при выполнении WS-файла. Если значение атрибута debug равно true, то задание может быть выполнено во внешнем отладчике (см. приложение 3). Если же значение атрибута debug равно false, то отладчик для этого задания применен быть не
Элемент <job>
Элемент <job> Элементы <job> позволяют определять несколько заданий (независимо выполняющихся частей) в одном WS-файле. Иначе говоря, между тегами <job> и </job> будет находиться отдельный сценарий (который, в свою очередь, может состоять из нескольких частей,
Элемент <example>
Элемент <example> Внутри элемента <example> приводится текст из одной или нескольких строк, в котором можно описать примеры запуска сценария. Если сценарий был запущен с ключом /? в командной строке или в сценарии встретился вызов метода ShowUsage объекта WshArguments, то этот текст
Элемент 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, вычисляется и приводится к булевому типу. В том и только том