
- •Лекция 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.8.3. Элементxsl:attribute-set
Для того чтобы упростить создание в элементах целых наборов атрибутов, можно заранее определить их в элементе xsl:attribute-set, который имеет следующий синтаксис:
<xsl:attribute-set
name="имя"
use-attribute-sets="имена"
>
<!--
Содержимое: элементы xsl:attribute
-->
</xsl:attribute-set>
Обязательный атрибут nameзадает имя набора атрибутов. В атрибутеuse-attribute-setsчерез пробел перечисляются имена наборов атрибутов, которые должны быть использованы в данном элементе.
Элемент xsl:attribute-setсодержит последовательность, состоящую из нуля или более элементовxsl:attribute.
Именованные наборы атрибутов можно использовать, указывая их имена в значении атрибута use-attribute-sets, который может присутствовать в элементахxsl:element,xsl:copyиxsl:attribute-set, а также в литеральных результирующих элементах.
Включение набора атрибутов в элемент равносильно простому копированию элементов xsl:attribute, определенных в соответствующих элементахxsl:attribute-set.
Пример использования элементов xsl:element, xsl:attribute и xsl:attribute-set:
Следующая таблица стилей формирует документ HTMLдля вывода тем сообщений в документеXMLmessage.xml:
<?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"/>
<xsl:attribute-set name="hrAttrs">
<xsl:attribute name="width">25%</xsl:attribute>
<xsl:attribute name="color">green</xsl:attribute>
<xsl:attribute name="align">left</xsl:attribute>
</xsl:attribute-set>
<!-- Формирование выходного документа HTML -->
<xsl:template match="/">
<html>
<head>
<title>Вывод тем сообщений</title>
<style type="text/css">
.red {color:red}
.bold {font-weight:bold}
</style>
</head>
<body>
<!-- Применение правила шаблона для элемента message -->
<xsl:apply-templates
select="email-folder/message"/>
<!-- Задание элемента hr -->
<xsl:element name="hr"
use-attribute-sets="hrAttrs"/>
</body>
</html>
</xsl:template>
<!-- Задание правила шаблона для элемента message -->
<xsl:template match="message">
<!-- Задание элемента hr -->
<xsl:element name="hr"
use-attribute-sets="hrAttrs"/>
<!-- Задание элемента p -->
<p class="bold">Тема:
<!-- Задание элемента span -->
<xsl:element name="span">
<!-- Задание атрибута class для элемента span -->
<xsl:attribute
name="class">red</xsl:attribute>
<!-- Получение значения для элемента subject -->
<xsl:apply-templates
select="./header/subject/text()"/>
</xsl:element>
</p>
</xsl:template>
</xsl:stylesheet>
В результате преобразования документ HTMLбудет иметь следующий вид:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1251">
<title>Вывод тем сообщений</title>
<style type="text/css">
.red {color:red}
.bold {font-weight:bold}
</style>
</head>
<body>
<hr width="25%" color="green" align="left">
<p class="bold">Тема:<span
class="red">Поздравление</span></p>
<hr width="25%" color="green" align="left">
<p class="bold">Тема: <span
class="red">Напоминание</span></p>
<hr width="25%" color="green" align="left">
<p class="bold">Тема: <span
class="red">Отказ</span></p>
<hr width="25%" color="green" align="left">
<p class="bold">Тема: <span
class="red">Вопрос</span></p>
<hr width="25%" color="green" align="left">
<p class="bold">Тема: <span
class="red">Ответ</span></p>
<hr width="25%" color="green" align="left">
</body>
</html>
и в Web-браузере будет выведено:
Файл: