Книга: Технология XSLT
Элемент 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
импортированного шаблона.
- Элемент
- Элемент xsl:import
- Создание свободно позиционируемых элементов
- 6.4. Рабочий лист Excel и его структурные элементы
- Использование отдельных процессоров XSLT
- Письма с элементами графики и вложениями
- 2. How to Apply These Terms to Your New Programs
- Элемент STYLE
- 4.4. Логические элементы и синтез логических схем
- 4.7 Структурные элементы SAN
- Добавление, изменение и удаление элементов списка
- Восстановление элементов списка из Корзины