
- •Лекция 4-07
- •Тема 5.3. Языки xslt и xsl
- •Тема 5.3. Языки xslTиXsl
- •5.3.1. Связывание документовXmLс таблицами стилей
- •5.3.2. Язык xsLи его компоненты
- •5.3.3. Преобразование документа с помощьюXslt
- •5.3.3.1. Технология преобразования
- •5.3.3.2. Процессоры xslt
- •5.3.4. Структура документаXslt
- •5.3.4.1. Пространство именXslt
- •5.3.4.2. Корневые элементы и элементы верхнего уровня документаXslt
- •5.3.4.3. Условное включение элемента
- •5.3.4.4. Модульная структура преобразованийXslt
- •5.3.4.4.1. Включение внешних файлов
- •5.3.4.4.2. Импорт внешних файлов
- •5.3.4.4.3. Использование сущностей
- •5.3.4.4.4. Импорт схем
- •5.3.5. Совместное использование преобразований и документовXml
- •5.3.6. Управление выводом вXslt
- •5.3.6.1. Элементxsl:output
- •5.3.6.2. Метод вывода "xml"
- •5.3.6.3. Метод вывода "xhtml"
- •5.3.6.4. Метод вывода "html"
- •5.3.6.5. Метод вывода "text"
- •5.3.7. Правила шаблона вXslt
- •5.3.7.1. Образцы и шаблоны
- •5.3.7.2. Объявлениешаблона
- •5.3.7.3. Вызов неименованных правил шаблона
- •5.3.7.4. Упрощенные преобразования
- •5.3.8. Создание узлов элементов и атрибутов вXslt
- •5.3.8.1. Элементxsl:element
- •5.3.8.2. Элементxsl:attribute
- •5.3.8.3. Элементxsl:attribute-set
5.3.7.3. Вызов неименованных правил шаблона
Для применения правил шаблона (в которых не задан атрибут name) вXSLTиспользуется элемент-инструкцияxsl:apply-templates.
Этот элемент имеет следующий синтаксис:
<xsl:apply-templates
select="выражение"
mode="режим">
<!--
Содержимое: элементы xsl:sort или xsl:with-param
-->
</xsl:apply-templates>
Элемент xsl:apply-templatesполучает на входе последовательность узлов, соответствующих образцу, заданному в атрибутеmatchэлементаxsl:template. Необязательный атрибутselectзадает выражение, результатом которого является последовательность узлов, которая является выборкой из исходной последовательности узлов. Если атрибутselectне задан, то правила шаблона применяются ко всем дочерним узлам текущего узла, т.е. инструкция
<xsl:apply-templates/>
действует так же, как инструкция
<xsl:apply-templates select="child::node()"/>
В результате выполнения элемента xsl:apply-templatesполучается последовательность компонент, которая чаще всего добавляется к результирующей иерархической структуре.
Оба элемента xsl:templateиxsl:apply-templatesимеют необязательный атрибутmode. Если элементxsl:templateне имеет атрибутаmatch, то он не должен иметь и атрибутаmode. Если элементxsl:apply-templatesимеет атрибутmode, то он применяется только к тем правилам шаблона из элементовxsl:template, которые имеют атрибутmodeс тем же значением, либо имеют значение атрибутаmode, равное "#all". Если элементxsl:apply-templatesатрибутаmodeне имеет, то он применяется только к тем правилам шаблона из элементовxsl:template, которые также не имеют атрибутаmode, либо имеют значение атрибутаmode, равное "#default". В элементеxsl:apply-templatesсуществует два предопределенных имени режимов: "#default" (режим, действующий по умолчанию) и "#current" (текущий режим).
Пример использования элементов xsl:template и xsl:apply-templates:
Вывод тем сообщений для документа XML email.xml(см.5.1.1.5.2).
Преобразование XSLT имеет следующий вид:
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0"
encoding="windows-1251" indent="yes"/>
<!-- Формирование выходного документа HTML -->
<xsl:template match="/">Вывод тем сообщений
<html>
<head>
<title> Вывод тем сообщений</title>
</head>
<body>
<!-- Применение правила шаблона для элемента subject -->
<xsl:apply-templates select="//subject"/>
</body>
</html>
</xsl:template>
<!-- Задание правила шаблона для элемента subject -->
<xsl:template match="subject">
<p>
<span
style="font-weight:bold;color:blue">Тема: </span>
<xsl:apply-templates/>
</p>
</xsl:template>
</xsl:stylesheet>
Сформированный выходной документ HTMLимеет следующий вид:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1251">
<title>Вывод тем сообщений</title>
</head>
<body>
<p><span style="font-weight:bold;color:blue">
Тема: </span>Поздравление</p>
<p><span style="font-weight:bold;color:blue">
Тема: </span>Напоминание</p>
<p><span style="font-weight:bold;color:blue">
Тема: </span>Отказ</p>
<p><span style="font-weight:bold;color:blue">
Тема: </span>Вопрос</p>
<p><span style="font-weight:bold;color:blue">
Тема: </span>Ответ</p>
</body>
</html>
Вывод результата преобразования в Web-браузере будет иметь следующий вид: