- •Лабораторная работа 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.5.3. Встроенные правила шаблона
В спецификации определены несколько встроенных правил шаблона, которые должен реализовать любой процессор XSLT.
Первое встроенное правило шаблона позволяет рекурсивно продолжать обработку в отсутствии успешного сравнения с явным правилом шаблона в стиле. Это правило шаблона используется как для узлов элементов, так и для корневого узла и определяется следующим образом:
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>.
Для каждого метода также есть встроенное правило шаблона, позволяющее рекурсивно продолжать обработку в том же самом режиме, в отсутствии успешного сравнения с образцом из явного правила шаблона в этом стиле. Это правило шаблона применяется как для узлов элементов, так и для корневого узла. Далее приведен эквивалент встроенного правила шаблона для режима m.
<xsl:template match="*|/" mode="m">
<xsl:apply-templates mode="m"/>
</xsl:template>.
Также есть встроенное правило шаблона для текстовых узлов и узлов атрибутов, которое просто копирует текст:
<xsl:template match="text()|@*">
<xsl:value-of select="."/>
</xsl:template>.
Для инструкций обработки и комментариев встроенное правило шаблона не должно делать ничего:
<xsl:template match="processing-instruction()|comment()"/>
Встроенное правило шаблона для узлов пространства имен также не должно делать ничего. Нет образца, который бы мог соответствовать узлу пространства имен, поэтому встроенное правило шаблона является единственным правилом шаблона, которое применяется к узлам пространства имен.
Встроенные правила шаблона обрабатываются так, как будто они были неявно импортированы раньше стиля, а потому имеют меньший приоритет импорта, чем все остальные правила шаблона. Таким образом, автор можно переопределить встроенное правило шаблона, явно включив новое правило шаблона.
3.3.5.4. Обработка пробельных символов
В XSLTвыделяются четыре пробельных символа, обработка которых несколько отличается от обработки других символов. Это следующие символы:
пробел (десятичный код: #32, шестнадцатеричный код#x20);
перевод строки (десятичный код: #10, шестнадцатеричный код#xA);
возврат каретки (десятичный код: #13, шестнадцатеричный код#xD);
горизонтальная табуляция (десятичный код: #9, шестнадцатеричный код#x9).
При обработке процессором XSLTтекстовый узел будет сохранен при выполнении хотя бы одного из следующих условий.
Он содержит хотя бы один непробельный символ.
Он принадлежит элементу, в котором сохранение пробельных символов задано средствами XML, а именно атрибутом xml:spaceсо значениемpreserve.
Он принадлежит элементу, имя которого включено во множество имен элементов, для которых нужно сохранять пробельные символы.
Во всех остальных случаях текстовый узел будет удален.
Для преобразований сохраняющее множество состоит из единственного элемента xsl:text, то есть единственный элемент в преобразовании, для которого пробельные текстовые узлы не будут удаляться, – это элементxsl:text. Поэтому его часто используют для вывода в выходящем документе пробельных символов.
Для входящих документов сохраняющее множество состоит из имен всех элементов. То есть по умолчанию преобразования сохраняют все пробельные текстовые узлы. Для изменения сохраняющего множества элементов входящего документа используются элементы xsl:preserve-spaceиxsl:strip-space.
Эти элементы имеют следующий синтаксис:
<xsl:preserve-space
elements="имена"
/>
<xsl:strip-space
elements="имена"
/>
Элемент xsl:preserve-spaceдобавляет,axsl:strip-spaceудаляет имя элемента из сохраняющего множества входящего документа.
Обязательные атрибуты elementsэлементовxsl:strip-spaceиxsl:preserve-spaceсодержат либо значение"*", либо список имен, разделенных пробелами.
Значение "*"используется для выбора произвольных имен. Ему будут соответствовать любые имена элементов.
Имя в списке может быть либо именем элемента, либо иметь форму "префикс:*". В первом случае выбор будет производиться для всех элементов с заданным именем, например, для удаления пробельных символов в элементахdиcв преобразовании достаточно указать:
<xsl:strip-space elements="d c"/>.
Во втором случае будет производиться выбор всех элементов в данном пространстве имен. Например, если в документе определен префикс пространства имен uprв виде атрибутаxmlns:upr="http://www.upr.com", проверке имени"upr:*"будут соответствовать все элементы пространства имен, определяемого идентификатором"http://www.upr.com".
