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

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

Жанры

Технология XSLT

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

Шрифт:

</xsl:if>

<xsl:text>.</xsl:text>

</xsl:message>

<xsl:apply-templates/>

</element>

 </xsl:template>

</xsl:stylesheet>

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

<element name="a">

 <element name="b">

<element name="c">

<element name="d"/>

</element>

 </element>

</element>

Листинг 8.8.
Сообщения процессора

Processing element a.

Processing element b which has a parent element a.

Processing element с which has a parent element b.

Processing element d which has a parent element c.

Атрибут

terminate
указывает на то, должен ли процессор прекратить дальнейшую обработку документа или нет. Значением этого атрибута по умолчанию является
"no"
, что означает, что процессор должен просто вывести сообщения и продолжать дальнейшее выполнение шаблона. Если же в
xsl:message
указано
terminate="yes"
, то процессор, выведя сообщение, прервет обработку. Этот прием может использоваться, например, для того, чтобы проверять входящие документы на соответствие определенной схеме.

Пример

При помощи

xsl:message
мы можем запретить обработку документов, которые не имеют в корне элемент с именем
"html"
в любом регистре символов.

Листинг 8.9. Шаблон преобразования

<xsl:template match="/">

 <xsl:if test="translate(name(*),'html','HTML')!='HTML'">

<xsl:message terminate="yes">

<xsl:text>Document has no root HTML element.</xsl:text>

</xsl:message>

 </xsl:if>

</xsl:template>

Если мы будем обрабатывать документ вида

<hTmL>

 <body/>

</hTmL>

обработка не будет прервана, в то время как преобразование документа

<ht-ml>

 <body/>

</ht-ml>

будет прервано сообщением:

Document has no root HTML element:

Processing terminated using xsl:message

Сортировка

При преобразовании документа элементами

xsl:for-each
и
xsl:apply-templates
, выбранные узлы по умолчанию обрабатываются в порядке просмотра документа, который зависит от выражения, использованного в атрибуте
select
этих элементов. XSLT позволяет изменять этот порядок посредством использования механизма сортировки.

Элементы

xsl:for-each
и
xsl:apply-templates
могут содержать один или несколько элементов
xsl:sort
, которые позволяют предварительно сортировать обрабатываемое множество узлов.

Элемент xsl:sort

Синтаксис этого элемента определяется

в XSLT как:

<xsl:sort

 select = "выражение"

 lang = "язык"

 data-type = "text" | "number" | "имя"

 order = "ascending" | "descending"

 case-order = "upper-first" | "lower-first" />

В случае если

xsl:for-each
и
xsl:apply-templates
содержат элементы
xsl:sort
, обработка множества узлов должна производиться не в порядке просмотра документа, а в порядке, который определяется ключами, вычисленными при помощи
xsl:sort
. Первый элемент
xsl:sort
, присутствующий в родительском элементе, определяет первичный ключ сортировки, второй элемент — вторичный ключ, и так далее.

Элемент

xsl:sort
обладает атрибутом
select
, значением которого является выражение, называемое также ключевым выражением. Это выражение вычисляется для каждого узла обрабатываемого множества, преобразуется в строку и затем используется как значение ключа при сортировке. По умолчанию значением этого атрибута является
"."
, что означает, что в качестве значения ключа для каждого узла используется его строковое значение.

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

Элемент

xsl:sort
может иметь следующие необязательные атрибуты, которые указывают некоторые параметры сортировки.

□ Атрибут

order
определяет порядок, в котором узлы должны сортироваться по своим ключам. Этот атрибут может принимать только два значения —
"ascending"
, указывающее на восходящий порядок сортировки, и
"descending"
, указывающее на нисходящий порядок. Значением по умолчанию является
"ascending"
, то есть восходящий порядок.

□ Атрибут

lang
определяет язык ключей сортировки. Дело в том, что в разных языках символы алфавита могут иметь различный порядок, что, соответственно, должно учитываться при сортировке. Атрибут
lang
в XSLT может иметь те же самые значения, что и атрибут
xml:lang
(например:
"en"
,
"en-us"
,
"ru"
и т.д.). Если значение этого атрибута не определено, процессор может либо определять язык исходя из параметров системы, либо сортировать строки исходя из порядка кодов символов Unicode.

□ Атрибут

data-type
определяет тип данных, который несут строковые значения ключей. Техническая рекомендация XSLT разрешает этому атрибуту иметь следующие значения:

 • 

"text"
— ключи должны быть отсортированы в лексикографическом порядке исходя из языка, определенного атрибутом
lang
или параметрами системы;

 • 

"number"
— ключи должны сравниваться в численном виде. Если строковое значение ключа не является числом, оно будет преобразовано к не-числу (
NaN
), и, поскольку нечисловые значения неупорядочены, соответствующий узел может появиться в отсортированном множестве где угодно;

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

Город Богов 3

Парсиев Дмитрий
3. Профсоюз водителей грузовых драконов
Фантастика:
юмористическое фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Город Богов 3

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2

Начальник милиции 2

Дамиров Рафаэль
2. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции 2

Граф

Ланцов Михаил Алексеевич
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Граф

Мастер темных Арканов

Карелин Сергей Витальевич
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных Арканов

Искра Силы

Шабынин Александр
1. Мир Бессмертных
Фантастика:
городское фэнтези
историческое фэнтези
сказочная фантастика
фэнтези
эпическая фантастика
5.00
рейтинг книги
Искра Силы

Имя нам Легион. Том 9

Дорничев Дмитрий
9. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 9

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

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

Темный Лекарь

Токсик Саша
1. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь

Ненужная дочь

Брай Марьяна
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Ненужная дочь

Корсар

Русич Антон
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.29
рейтинг книги
Корсар

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

Курсант: назад в СССР

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