Чтение онлайн

на главную - закладки

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

Для входящих документов сохраняющее множество состоит из имен всех элементов. То есть по умолчанию преобразования сохраняют все пробельные текстовые узлы. Для изменения сохраняющего множества элементов входящего документа используются элементы

xsl:preserve-space
и
xsl:strip-space
.

Элементы xsl:preserve-space и xsl:strip-space

Синтаксические конструкции этих элементов очень похожи:

<xsl:preserve-space

 elements="токены"/>

<xsl:strip-space

 elements="токены"/>

Элемент

xsl:preserve-space
добавляет, a
xsl:strip-space
удаляет имя элемента из сохраняющего множества входящего документа.

Пример

Предположим, нам нужно сохранять пробельные символы во всех элементах

d
и удалять их в элементах
с
. Тогда в преобразовании достаточно указать

<xsl:preserve-space elements="d"/>

<xsl:strip-space elements="c"/>

Вообще, обязательные атрибуты elements элементов

xsl:strip-space
и
xsl:preserve-space
содержат не сами имена элементов, а так называемые проверки имен. Проверка имени имеет три варианта синтаксиса.

□ Синтаксис

"*"
используется для выбора произвольных имен. Ей будут соответствовать любые имена элементов.

□ Синтаксис

"имя"
используется для выбора элементов с заданным именем. К примеру, проверке имени
"d"
будут соответствовать все элементы с именем "
d
".

□ Синтаксис

"префикс:*"
используется для выбора всех элементов в данном пространстве имен. К примеру, если в документе определен префикс пространства имен
upr
в виде атрибута
xmlns:upr="http://www.upr.com"
, проверке имени
"upr:*"
будут соответствовать все элементы пространства имен, определяемого идентификатором
"http://www.upr.com"
.

Пример

Предположим, что нам необходимо сохранить пробельные символы в элементе с именем

с
и удалить их в элементе
e
и элементах, принадлежащих пространству имен, определяемому идентификатором "
urn:d
".

Листинг 8.2. Входящий документ

<а xmlns:d="urn:d">¶

□□<d:b>¶

□□□□<c>¶

□□□□□□</e>¶

□□□□</c>¶

□□</d:b>¶

</a>

Листинг 8.3. Преобразование

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:preserve-space elements="c"/>

 <xsl:strip-space elements="e t:*"

xmlns:t="urn:d"/>

 <xsl:template match="/">

<xsl:copy-of select="/"/>

 </xsl:template>

</xsl:stylesheet>

Листинг 8.4.
Выходящий документ

<?xml version="1.0" encoding="utf-8"?><a xmlns:d="urn:d">¶

□□<d:b><c>¶

□□□□□□<e/>¶

□□□□</c></d:b>¶

</a>

Сообщения процессора

По большому счету, мы не можем контролировать процесс преобразования. Процессор может сам выбирать, как и в какой последовательности он будет выполнять те или иные шаблоны — таковы особенности декларативного программирования. Вместе с тем мы все-таки можем получить кое-какую информацию о ходе преобразования, используя механизм, называемый в XSLT сообщениями.

Элемент xsl:message

Синтаксис этого элемента дан ниже:

<xsl:message

 terminate="yes" | "no">

 <!-- Содержимое: шаблон -->

</xsl:message>

Элемент

xsl:message
указывает процессору на то, что он должен вывести сообщение, которое является результатом обработки шаблона, содержащегося в этом элементе. Механизм вывода сообщения зависит от реализации того или иного процессора и может быть различным — от вывода текста сообщения на экран до вызова внешнего модуля для обработки сообщения.

Пример

Иногда в процессе отладки преобразования бывает полезно выводить сообщения о том, какой элемент обрабатывается в данный момент.

Листинг 8.5. Входящий документ

<a><b><c><d/></c></b></a>

Листинг 8.6. Преобразование

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="*">

<element name="{name}">

<xsl:message>

<xsl:text>Processing element </xsl:text>

<xsl:value-of select="name"/>

<xsl:if test="parent::*">

<xsl:text> which has a parent element </xsl:text>

<xsl:value-of select="name(..)"/>

Поделиться:
Популярные книги

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Предопределение

Осадчук Алексей Витальевич
9. Последняя жизнь
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Предопределение

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Ученик. Книга 4

Первухин Андрей Евгеньевич
4. Ученик
Фантастика:
фэнтези
5.67
рейтинг книги
Ученик. Книга 4

(Не)нужная жена дракона

Углицкая Алина
5. Хроники Драконьей империи
Любовные романы:
любовно-фантастические романы
6.89
рейтинг книги
(Не)нужная жена дракона

Надуй щеки! Том 6

Вишневский Сергей Викторович
6. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки! Том 6

Газлайтер. Том 14

Володин Григорий Григорьевич
14. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 14

(Не)зачёт, Дарья Сергеевна!

Рам Янка
8. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
(Не)зачёт, Дарья Сергеевна!

ВоенТур 3

АЗК
3. Антиблицкриг
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
ВоенТур 3

Враг из прошлого тысячелетия

Еслер Андрей
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Враг из прошлого тысячелетия

Кодекс Крови. Книга Х

Борзых М.
10. РОС: Кодекс Крови
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга Х

Тайны ордена

Каменистый Артем
6. Девятый
Фантастика:
боевая фантастика
попаданцы
7.48
рейтинг книги
Тайны ордена

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Назад в ссср 6

Дамиров Рафаэль
6. Курсант
Фантастика:
попаданцы
альтернативная история
6.00
рейтинг книги
Назад в ссср 6