Обработка пробельных символов

Обработка пробельных символов

В XSLT выделяются четыре пробельных символа, обработка которых несколько отличается от обработки других символов. Их Unicode-коды и описания сведены в табл. 8.1.

Таблица 8.1. Unicode-коды пробельных символов

Unicode-коды Описание
Десятичный Шестнадцатеричный
#9 #x9 Горизонтальная табуляция
#10 #xA Перевод строки
#13 #xD Возврат каретки
#32 #x20 Пробел

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

Пример

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

Листинг 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. Поэтому его часто используют для вывода в выходящем документе пробельных символов.

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

8.6.4 Массивы Символов

Из книги C++ автора Хилл Мюррей

8.6.4 Массивы Символов Массив char можно инициализировать строкой. Последовтельные символы строки инициализируют члены массива. Напрмер:char msg[] = «Syntax error on line %d »;демонстрирует массив символов, члены которого инициалзированы строкой. Обратите внимание, что


Форматирование символов

Из книги Photoshop. Мультимедийный курс автора Мединов Олег

Форматирование символов Форматирование символов производится на палитре Символ (рис. 6.3). Рис. 6.3. Палитра СимволВ левой верхней части палитры расположен раскрывающийся список для выбора шрифта, а правее – раскрывающийся список для выбора начертания шрифта:• Regular


Вставка символов

Из книги Adobe InDesign CS3 автора Завгородний Владимир

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


Стили символов

Из книги XSLT автора Хольцнер Стивен

Стили символов Созданием, управлением и использованием стилей символов занимается палитра Character Styles (Стили символов) (рис. 17.1). В начале работы она пуста, в ней присутствует только строка [None] (Нет стиля). Рис. 17.1. Палитра Character Styles (Стили символов) и ее менюНачать работу с уже


Обработка символов-разделителей

Из книги Программирование на языке Пролог для искусственного интеллекта автора Братко Иван

Обработка символов-разделителей Поначалу символы-разделители (whitespace) доставляют авторам XSLT много хлопот. В главе 2 объяснялось, что «чистые» узлы-разделители — это текстовые узлы, содержащие только символы-разделители (пробелы, возвраты каретки, переводы строки и


Обработка отдельных символов:

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Обработка отдельных символов: <fo:character> Как можно догадаться по имени, объект <fo:character> позволяет работать с отдельными символами в документе. Одна из областей применения <fo:character> — случай, когда нужно заменить определенные символы на другие. В следующем примере я


Определение класса символов и преобразование символов

Из книги FictionBook Editor V 2.66 Руководство автора Izekbis

Определение класса символов и преобразование символов Функция Краткое описание isalnum проверка на букву или цифру isalpha проверка на букву isascii проверка на символ из набора кодировки ASCII iscntrl проверка на управляющий символ isdigit проверка на десятичную


Изучаем мир тви-символов

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

Изучаем мир тви-символов С. Кара-Мурза в своей книге «Демонтаж народа» описывает мир символов. Он говорит, что «мир символов упорядочивает историю, связывает в нашей коллективной жизни прошлое, настоящее и будущее». Действительно, символы значат для нас чрезвычайно


Таблица символов v1.2

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид


Наборы символов

Из книги Как приручить компьютер за несколько часов автора Ремнева Ирина


23.1.4. Регистр символов

Из книги автора

23.1.4. Регистр символов Чаще всего причиной ошибки является неверное использование регистра при работе с переменными. Например, при присваивании переменной применяется верхний регистр, а при ссылке на нее — нижний. Тогда не следует удивляться тому, что присваивания


Вставка символов

Из книги автора

Вставка символов Если вы хотите напечатать знак, которого нет на клавиатуре (?, ?, ?, ?, €, ® и т. п.), открываете меню Вставка и выбираете Символ. Перед вами откроется окно, в котором выбираете необходимые символы и нажимаете кнопку Вставить.Теперь потренируйтесь в наборе