- •Лабораторная работа 4-03
- •3.1.2. Пространство имен xslt
- •3.1.3. Корневые элементы и элементы верхнего уровня документаXslt
- •3.1.4. Условное включение элемента
- •3.1.5. Модульная структура преобразованийXslt
- •3.1.4. Совместное использование преобразований и документов xml
- •3.2. Управление выводом в xslt
- •3.2.1. Элементxsl:output
- •3.2.2. Метод вывода "xml"
- •3.2.3. Метод вывода "xhtml"
- •3.2.4. Метод вывода "html"
- •3.2.5. Метод вывода "text"
- •3.3.Язык xslt
- •3.3.1. Образцы и шаблоны
- •3.3.2. Объявлениешаблона
- •3.3.3. Вызов неименованных правил шаблона
- •3.3.4. Создание узлов элементов и атрибутов вXslt
- •3.3.4.1. Элемент xsl:element
- •3.3.4.2. Элементxsl:attribute
- •3.3.4.3. Элементxsl:attribute-set
- •3.3.5. Создание текстовых узлов вXslt
- •3.3.5.1. Элементxsl:text
- •3.3.5.2. Элементxsl:value-of
- •3.3.5.3. Встроенные правила шаблона
- •3.3.5.4. Обработка пробельных символов
- •3.3.6. Создание узлов документа, комментариев, инструкций по обработке и пространства имен в xslt
- •3.3.6.1. Элемент xsl:document
- •3.3.6.2. Элементxsl:result-document
- •3.3.6.3. Элементxsl:comment
- •3.3.6.4. Элемент xsl:processing-instruction
- •3.3.6.5. Элементxsl:namespace
- •3.3.7. Копирование узлов вXslt
- •3.3.7.1. Элементxsl:copy
- •3.3.7.2. Элементxsl:copy-of
- •3.3.7.3. Элементxsl:sequence
- •3.3.8. Условная и циклическая обработка вXslt
- •3.3.8.1. Элементxsl:if
- •3.3.8.2. Элементы xsl:choose, xsl:when и xsl:otherwise
- •3.3.8.3. Элементxsl:for-each
- •3.3.9. Сортировка в xslt
- •3.3.10. Нумерация в xslt
- •3.3.11. Переменные и параметры в xslt
- •3.3.11.1. Переменные в xslt
- •3.3.11.2. Вызов именованных правил шаблона
- •3.3.11.3. Параметры в xslt
- •3.4. Выполнение преобразований документов в xmlSpy
- •3.4.1. Создание документа xslt
- •3.4.2. Выполнение преобразования xslt
- •4. Порядок выполнения работы
- •Вариант 5-01
- •Вариант 5-02
- •Вариант 5-03
- •Вариант 5-04
- •Вариант 5-05
- •Вариант 5-06
- •Вариант 5-07
- •Вариант 5-08
- •Вариант 5-09
- •Вариант 5-10
- •Вариант 5-11
- •Вариант 5-12
- •Вариант 5-13
- •Вариант 5-14
- •Вариант 5-15
- •Вариант 5-16
- •Вариант 5-17
- •Вариант 5-18
- •Вариант 5-19
- •Вариант 5-20
- •Вариант 5-21
- •Вариант 5-22
- •Вариант 5-23
- •Вариант 5-24
- •Вариант 5-25
- •Вариант 5-26
- •Вариант 5-27
- •Вариант 5-28
- •Вариант 5-29
- •Вариант 5-30
- •5. Содержание отчета
- •6. Вопросы для самоконтроля
3.3.7.2. Элементxsl:copy-of
Элемент xsl:copy-ofимеет следующий синтаксис:
<xsl:copy-of
select = "выражение"
copy-namespaces="yes" | "no"
type="имя-типа"
validation="strict" | "lax" | "preserve" | "strip"
/>
Использование элемента xsl:copy-ofполностью аналогично использованию элементаxsl:value-ofза тем исключением, чтоxsl:copy-ofпри выводе значения выражения преобразует его к строке не во всех случаях. Поведениеxsl:copy-ofзависит от того, какой тип данных возвращает выражение, заданное в обязательном атрибутеselect.
Если результат вычисления имеет булевский, числовой или строковый тип, то xsl:copy-ofвыводит его в виде текстового узла. В этом случае поведениеxsl:copy-ofне отличается от поведения элементаxsl:value-of.
Если результатом вычисления выражения является последовательность узлов, то xsl:copy-ofкопирует в выходящий документ все узлы в порядке просмотра документа вместе с их потомками.
Если результатом вычисления является узел документа, то он копируется в выходящий документ в неизмененном виде.
Атрибуты typeиvalidationв элементеxsl:copy-ofдействуют так же, как в элементеxsl:copy.
3.3.7.3. Элементxsl:sequence
Элемент-инструкция xsl:sequenceиспользуется в содержимом конструктора последовательности для создания последовательности узлов или атомарных значений. Этот элемент вXSLT2.0 имеет следующий синтаксис:
<xsl:sequence select ="выражение"
/>
Атрибут selectзадает выражение, результатом вычисления которого является последовательность узлов или атомарных значений.
В отличие от многих других инструкций, элемент может возвращать последовательность уже существующих узлов, а не создавать новые узлы.
3.3.8. Условная и циклическая обработка вXslt
3.3.8.1. Элементxsl:if
Элемент xsl:ifпозволяет создавать простые условия типа «если, то» и имеет следующий синтаксис:
<xsl:if
test="выражение''
>
<!--
Содержимое: конструктор последовательности
-->
</xsl:if>
Выражение, содержащееся в обязательном атрибуте test, вычисляется и приводится к булевому типу. В том и только том случае, если выражение имеет значениеtrue, процессор выполняет шаблон, содержащийся вxsl:if.
Вследствие того, что атрибуты в XMLне могут содержать некоторые специальные символы (такие как "<" и "&"), их необходимо заменять символьными сущностями. Так, инструкция
<xsl:if test="a < b"/>
будет с точки зрения синтаксиса XML некорректным. Вместо нее следует использовать эквивалентную инструкцию
<xsl:if test="a < b"/>.
3.3.8.2. Элементы xsl:choose, xsl:when и xsl:otherwise
Инструкция xsl:chooseвместе с инструкциямиxsl:whenиxsl:otherwiseсоздает более сложную конструкцию для выбора одной из нескольких имеющихся возможностей в зависимости от выполнения тех или иных условий.
Элементы xsl:choose,xsl:whenиxsl:otherwiseимеют следующий синтаксис:
<xsl:choose>
<!--
Содержимое: один или более элемент xsl:when,
необязательный элемент xsl:otherwise
-->
</xsl:choose>
<xsl:when
test="выражение"
>
<!--
Содержимое: конструктор последовательности
-->
</xsl:when>
<xsl:otherwise>
<!--
Содержимое: конструктор последовательности
-->
</xsl:otherwise>
Элемент xsl:chooseсодержит один или несколько элементовxsl:whenи необязательный элементxsl:otherwise. При обработкеxsl:chooseпроцессор поочередно вычисляет выражения, содержащиеся в атрибутахtestэлементовxsl:when, приводит их к булевскому типу и выполняет содержимое первого (и только первого) элемента, тестовое выражение которого будет равноtrue. В случае если ни одно из тестовых выражений не равно истине и вxsl:chooseприсутствуетxsl:otherwise, процессор выполнит содержимое этого элемента. Если же ни одно из тестовых выражений не равно истине и вxsl:chooseнет элементаxsl:otherwise, то ничего не создается.
Общая форма (скелет) альтернативного выбора с помощью инструкции xsl:chooseзаписывается в следующем виде:
<xsl:choose>
<xsl:when test="условие-1">
шаблон-1
</xsl:when>
<xsl:when test="условие-2">
шаблон-2
</xsl:when>
<!-- ... -->
<xsl:when test="условие-N">
шаблон-N
</xsl:when>
<xsl:otherwise>
шаблон-N+1
</xsl:otherwise>
</xsl:choose>.
