
- •Лекция 4-08
- •5.3.9. Создание текстовых узлов вXslt
- •5.3.9.1. Элементxsl:text
- •5.3.9.2. Элементxsl:value-of
- •5.3.9.3. Встроенные правила шаблона
- •1. Поздравление
- •2. Напоминание
- •5.3.9.4. Обработка пробельных символов
- •5.3.10. Создание узлов документа, комментариев, инструкций по обработке и пространства имен вXslt
- •5.3.10.1. Элемент xsl:document
- •5.3.10.2. Элементxsl:result-document
- •5.3.10.3. Элементxsl:comment
- •5.3.10.4. Элемент xsl:processing-instruction
- •5.3.10.5. Элементxsl:namespace
- •5.3.11. Копирование узлов вXslt
- •5.3.11.1. Элементxsl:copy
- •5.3.11.2. Элементxsl:copy-of
- •5.3.11.3. Элементxsl:sequence
- •5.3.12. Условная и циклическая обработка вXslt
- •5.3.12.1. Элементxsl:if
- •5.3.12.2. Элементы xsl:choose, xsl:when и xsl:otherwise
- •5.3.12.3. Элементxsl:for-each
- •5.3.12.4. Сортировка вXslt
- •5.3.13. Сообщения процессораXslt
- •5.3.14. Псевдонимы пространства имен вXslt
- •5.3.15. Нумерация вXslt
- •3. Поздравление
- •1. Поздравление
- •1. Поздравление
- •01). Поздравление
- •0:00:00:00:01)Поздравление
- •5.3.16. Форматирование чисел в xslt
- •5.3.17. Использование ключей вXslt
- •5.3.18. Переменные, параметры и функции вXslt
- •5.3.18.1. Переменные в xslt
- •5.3.18.2. Вызов именованных правил шаблона
- •5.3.18.3. Параметры в xslt
- •5.3.18.4. Функции стилей в xslt
- •5.3.19. Дополнительные функции xslt
- •5.3.19.1. Функцияdocument()
- •5.3.19.2. Функцияcurrent()
- •5.3.19.3. Функцияgenerate-id()
- •5.3.19.4. Функция system-property()
- •5.3.19.5. Функцияunparsed-entity-uri()
- •5.3.20 Использование расширений вXslt
- •5.3.20.1. Средства расширенияXslt
- •5.3.20.2. Инициатива exslt
- •5.3.20.3. Средства расширения в процессореMsxml
- •5.3.20.4. Средства расширения в процессореSaxon
1. Поздравление
2. Напоминание
Сообщение 1
От: ivanov@mail.com
Кому: petrov@mail.com
Тема: Поздравление
Текст: Поздравляю с днем рождения!
Сообщение 2
От: ivanov@mail.com
Кому: sidorov@mail.com
Тема: Напоминание
Текст: Встречаемся в 10.00..
5.3.9.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".
5.3.10. Создание узлов документа, комментариев, инструкций по обработке и пространства имен вXslt
5.3.10.1. Элемент xsl:document
Новый узел документа создается с помощью следующей инструкции:
<xsl:document
type="имя"
validation="strict" | "lax" | "preserve" | "strip"
>
<!--
Содержимое: конструктор последовательности
-->
</xsl:document>
Атрибут typeзадает проверку создаваемого узла документа на соответствие типу, заданному в значении атрибута и определенному в схеме документа.
Атрибут validationопределяет действия по проверке действительности создаваемого атрибута. Значения "preserve" и "strip" не требуют проверки узлов документа, причем в первом случае копируемые в новый документ узлы элементов и атрибутов сохраняют свой тип, а во втором – элементы получают типxs:untyped, а атрибуты – типxs:untypedAtomic. Если же задано значение "strict" или "lax", то в случае, если наследниками узла документа не является один узел элемента, а также, возможно, узлы комментариев и инструкций по обработке, выдается сообщение об ошибке. Затем выполняется проверка дочернего узла элемента в документе. Если проверяемый узел не соответствует своей схеме, также выдается сообщение об ошибке.
Атрибуты typeиvalidationявляются взаимоисключающими, т.е. в элементе может быть задан только один из этих атрибутов.