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

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

Жанры

Холзнер Стивен

Шрифт:

• 

text
выбирает все дочерние текстовые узлы контекстного узла;

• 

text[starts-with(., "In the course of human events")]
выбирает все дочерние текстовые узлы контекстного узла, начинающиеся с "
In the course of human events
";

• 

/PLANETS[@UNITS="million miles"]
выбирает все элементы
PLANETS
, у которых значение атрибута
UNITS
равно "
million miles
";

• 

PLANET[/PLANETS/@UNITS=@REFERENCE]
выбирает все элементы
<PLANET>
,
у которых значение атрибута
REFERENCE
такое же, как значение атрибута
UNITS
элемента
PLANETS
в корне документа;

• 

PLANET/*
выбирает все дочерние элементы элементов
PLANET
;

• PLANET/*/DAY выбирает все элементы DAY — правнуки элементов PLANET, являющиеся детьми контекстного узла;

• 

*/*
выбирает элементы-внуки текущего элемента;

• 

astrophysics:PLANET
выбирает элемент
PLANET
в пространстве имен «
astrophysics
»;

• 

astrophysics:*
выбирает любые элементы в пространстве имен «
astrophysics
»;

• 

PLANET[DAY and DENSITY]
выбирает все элементы
<PLANET>
, у которых есть по крайней мере один элемент
<DAY>
и один элемент
<DENSITY>
;

• 

PLANET[(DAY or DENSITY) and MASS]
выбирает все элементы
<PLANET>
, у которых есть по крайней мере один элемент
<DAY>
или один элемент
<DENSITY>
, а также по крайней мере один элемент
<MASS>
;

• 

PLANET[DAY and not(DISTANCE)]
выбирает все элементы
<PLANET>
, у которых есть по крайней мере один элемент
<DAY>
и нет элементов
<DISTANCE>
;

• 

PLANET[MASS=/STANDARD/REFERENCE/MASS]
выбирает все элементы
<PLANET>
, у которых значение элемента
<MASS>
равно значению элемента
/<STANDARD>/<REFERENCE>/<MASS>
.

На этом мы завершаем в данный момент рассмотрение образцов выбора; связанный материал приводится в главе 7 при рассмотрении выражений XPath. Глава 5 начинается с изучения способов работы с данными в XML-документах путем сортировки и принятия решения на основе значений данных.

Глава 5

Принятие решений и сортировка данных

Эта глава посвящена принятию решений, сортировке и различным способам обработки данных в ХМL-документах. Мы рассмотрим элементы

<xsl:if>
,
<xsl:choose>
,
<xsl:when>
,
<xsl:otherwise>
,
<xsl:for-each>
и
<xsl:sort>
, при помощи которых вы сможете обрабатывать данные и управлять выполнением преобразования в зависимости от значения данных.

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

Поэтому я также представлю в этой главе расширения XSLT, в том числе элемент рабочего проекта XSLT 1.1
<xsl:script>
. Этот элемент был предназначен для упрощения применения Java и JavaScript с процессором XSLT. (Для чтения этой книги нет необходимости владеть Java или JavaScript, но если вы знаете эти языки, вам будет приятно удостовериться, что некоторые процессоры XSLT дают возможность использовать их при преобразованиях XML.) Нечто похожее на этот элемент обязательно появится в XSLT 2.0. При помощи расширений вы можете расширять спецификацию XSLT, добавляя в XSLT новые элементы и функции какого-либо производителя или свои собственные.

Кроме того, в этой главе мы также рассмотрим, как перенумеровать элементы в документе, что делать в случае, когда ваш процессор XSLT не поддерживает определенное расширение, и многое другое. Я начну с наиболее часто используемого элемента из рассматриваемых в данной главе:

<xsl:if>
.

Элемент <xsl:if>

При помощи элемента

<xsl:if>
осуществляются проверки условия и принимаются действия на основе результата проверки. Он во многом похож на оператор
if
в языках программирования. У элемента
<xsl:if>
один атрибут:

• 

test
(обязательный). Устанавливается в значение логического (
Boolean
,
true/false
) условия, которое вы хотите проверить.

Элемент заключает в себе тело шаблона.

Вот как это работает: вы включаете тело шаблона внутрь элемента

<xsl:if>
, проверяющего какое-то выражение. Если это выражение истинно, тело шаблона используется, если ложно — игнорируется:

<xsl:if test="expression">

 <!--template body-->

</xsl:if>

Можно проверять любое выражение XPath. Для преобразования его в значения

true/false
в элементе
<xsl:if>
применяйте следующие правила:

• если выражение вычисляется в набор узлов, оно трактуется как

true
, когда набор узлов содержит хотя бы один узел;

• выражение-строка считается

true
, если строка не пуста;

• фрагмент результирующего дерева трактуется как

true
, если содержит узлы;

• если результат выражения — число, он считается

true
, когда отличен от нуля.

Элемент

<xsl:if>
во многом похож на оператор
if-then
в языках программирования. Однако не существует оператора
<xsl:else>
для формирования конструкций
if-then-else
— для этого служит элемент
<xsl:choose>
.

В листинге 5.1 я перечисляю планеты в

planets.xml
одну за другой и добавляю горизонтальное правило HTML, элемент <HR> (horizontal rule), после последнего элемента — но только после последнего. При помощи
<xsl:if>
это можно сделать так.

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

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Последняя Арена 6

Греков Сергей
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 6

По воле короля

Леви Кира
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
По воле короля

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

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

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

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

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

(Не) моя ДНК

Рымарь Диана
6. Сапфировые истории
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
(Не) моя ДНК

Протокол "Наследник"

Лисина Александра
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Протокол Наследник

Измена. Наследник для дракона

Солт Елена
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Измена. Наследник для дракона

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

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

Камень. Книга 4

Минин Станислав
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Камень. Книга 4

Измена. Право на сына

Арская Арина
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на сына

Инквизитор Тьмы 4

Шмаков Алексей Семенович
4. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 4

Кротовский, сколько можно?

Парсиев Дмитрий
5. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, сколько можно?