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

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

Жанры

Технология XSLT

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

Шрифт:

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

Пример

Рассмотрим шаблон преобразования, содержащий пробельные символы ("

" обозначает пробел, а "
" — перевод строки).

Листинг 8.1. Шаблон преобразования с пробельными символами

<xsl:template match="/">¶

□□□<a>¶

□□□¶

□□□□□□□□□<b/>¶

□□□□□□¶

□□□□□□□□□</a>¶

</xsl:template>

Поскольку

текстовые узлы этого шаблона содержат только пробельные символы, они будут удалены из дерева преобразования, и результат будет иметь вид:

<a><b/></a>

Вообще, текстовый узел будет сохранен при выполнении хотя бы одного из следующих условий.

□ Он содержит хотя бы один непробельный символ.

□ Он принадлежит элементу, в котором сохранение пробельных символов задано средствами XML, а именно атрибутом

xml:space
со значением
preserve
.

□ Он принадлежит элементу, имя которого включено во множество имен элементов, для которых нужно сохранять пробельные символы.

Во всех остальных случаях текстовый узел будет удален.

Продемонстрируем все три случая сохранения текстового узла на примерах.

Первый случай довольно прост. Шаблон

<xsl:template match="/">¶

□□<a/>¶

</xsl:template>

создаст в выходящем документе фрагмент

<а/>

безо всяких пробельных символов, в то время как шаблон

<xsl:template match="/">¶

□□|<a/>|¶

</xsl:template>

создаст фрагмент вида

□□|<a/>|¶

Различие двух этих шаблонов в том, что в первом текстовые узлы содержат текст "

¶ ¶ □□
" и "
¶ ¶
" соответственно, а во втором — "
¶ ¶ □□|
" и "
| ¶ ¶
". Текстовые узлы второго шаблона не будут удалены, поскольку они содержат непробельные символы (символы "
|
").

Второй случай сохранения текстовых узлов основан на использовании возможностей XML по управлению пробельными символами. Если в элементе задан атрибут

xml:space
со значением
"preserve"
, обрабатывающее программное обеспечение должно сохранять в нем и в его потомках пробельные символы. Единственным исключением из этого правила может быть опять же атрибут
xml:space
, заданный в элементе-потомке со значением
"default"
.

Пример

Шаблон

<xsl:template match="/">¶

□□<а>¶

□□□□<b>¶

□□□□□□<c>¶

□□□□□□□□<d/>¶

□□□□□□</c>¶

□□□□</b>¶

□□</a>¶

</xsl:template>

создаст в выходящем документе фрагмент вида:

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

Если же шаблон будет определен в виде:

<xsl:template match="/">¶

□□<а xml:space="preserve">¶

□□□□<b>¶

□□□□□□<c xml:space="default">¶

□□□□□□□□<d/>¶

□□□□□□</c>¶

□□□□</b>¶

□□</a>¶

</xsl:template>

то в выходящем фрагменте в элементах

а
и
b
пробельные символы будут сохранены, а в элементах
с
и
d
— удалены:

<а xml:space="preserve">¶

□□□□<b>¶

□□□□□□<c xml: space="default"><d/></c>¶

□□□□</b>¶

□□</а>

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

Для преобразований сохраняющее множество состоит из единственного элемента

xsl:text
, то есть единственный элемент в преобразовании, для которого пробельные текстовые узлы не будут удаляться, — это элемент
xsl:text
. Поэтому его часто используют для вывода в выходящем документе пробельных символов.

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

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Сын Тишайшего 4

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

Вперед в прошлое 9

Ратманов Денис
9. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 9

Воронцов. Перезагрузка. Книга 3

Тарасов Ник
3. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 3

Неудержимый. Книга II

Боярский Андрей
2. Неудержимый
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга II

Третий. Том 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 4

Душелов. Том 3

Faded Emory
3. Внутренние демоны
Фантастика:
альтернативная история
аниме
фэнтези
ранобэ
хентай
5.00
рейтинг книги
Душелов. Том 3

На границе империй. Том 2

INDIGO
2. Фортуна дама переменчивая
Фантастика:
космическая фантастика
7.35
рейтинг книги
На границе империй. Том 2

Страж Кодекса. Книга IX

Романов Илья Николаевич
9. КО: Страж Кодекса
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Страж Кодекса. Книга IX

Путь одиночки. Книга 3

Понарошку Евгений
3. Одиночка
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
5.00
рейтинг книги
Путь одиночки. Книга 3

Князь Барсов

Петров Максим Николаевич
1. РОС. На мягких лапах
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Князь Барсов

Наследник, скрывающий свой Род

Тарс Элиан
2. Десять Принцев Российской Империи
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Наследник, скрывающий свой Род

Убивать чтобы жить 7

Бор Жорж
7. УЧЖ
Фантастика:
героическая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 7

Я Гордый часть 5

Машуков Тимур
5. Стальные яйца
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Я Гордый часть 5