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

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

Жанры

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

Шрифт:

<TD><xsl:value-of select="RADIUS"/></TD>

<TD><xsl:value-of select="DAY"/></TD>

</TR>

</xsl:for-each>

</TABLE>

 </BODY>

</HTML>

Эта упрощенная таблица стилей форматирует

planets.xml
в
planets.html
практически так же хорошо, как и шаблон, использующий
<xsl:apply-templates>
,
в связи с чем появляется интересный вопрос: когда следует для прохода по узлам применять
<xsl:for-each>
, а когда
<xsl:apply-templates>
?

Как правило,

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

Элемент

<xsl:for-each>
работает во многом так же, как и
<xsl:apply-templates>
; можно даже вкладывать шаблоны при помощи
<xsl:for-each>
, как это делается при помощи последовательных элементов
<xsl:apply-templates>
. В листинге 5.8 я прохожу в цикле по каждому элементу
<PLANET>
, а затем во вложенном в него цикле по всем элементам, содержащимся в элементе
<PLANET>
, перечисляя их данные из элементов <
DATA>
следующим образом.

Листинг 5.8. Второй пример <xsl:for-each>

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

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

 <xsl:output method="xml"/>

 <xsl:template match="PLANETS">

<PLANETS>

<xsl:for-each select="PLANET">

<PLANET>

<xsl:for-each select="*">

<DATA>

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

</DATA>

</xsl:for-each>

</PLANET>

</xsl:for-each>

</PLANETS>

 </xsl:template>

</xsl:stylesheet>

И вот результат:

<?xml version="1.0" encoding="UTF-8"?>

<PLANETS>

 <PLANET>

<DATA>Mercury</DATA>

<DATA>.0553</DATA>

<DATA>58.65</DATA>

<DATA>1516</DATA>

<DATA>.983</DATA>

<DATA>43.4</DATA>

 </PLANET>

 <PLANET>

<DATA>Venus</DATA>

<DATA>.815</DATA>

<DATA>116.75</DATA>

<DATA>3716</DATA>

<DATA>.943</DATA>

<DATA>66.8</DATA>

 </PLANET>

 <PLANET>

<DATA>Earth</DATA>

<DATA>1</DATA>

<DATA>1</DATA>

<DATA>2107</DATA>

<DATA>1</DATA>

<DATA>128.4</DATA>

 </PLANET>

</PLANETS>

Сортирующие

элементы

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

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

• 

select
(необязательный). Принимает значение выражения XPath, возвращающего набор узлов для сортировки. По умолчанию — «string(.)»;

• 

order
(необязательный). Задает порядок сортировки, устанавливается в «ascending» (по возрастанию) или «descending» (по убыванию);

• 

case-order
(необязательный). Определяет, будут ли буквы в верхнем регистре располагаться перед буквами в нижнем регистре. Устанавливается в «upper-first» (сначала верхний) или «lower-first» (сначала нижний);

• 

lang
(необязательный). Задает язык, чьи соглашения о сортировке будут применяться. Устанавливается в код языка, допустимый в атрибуте
xml:lang
;

• 

data-type
(необязательный). Определяет, будет ли сортировка вестись в алфавитном или числовом порядке. Устанавливается в «
text
» (текст), «
number
» (число) или в
QName
.

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

В листинге 5.9 я только отсортирую элементы

<PLANET>
в
planets.xml
в возрастающем алфавитном порядке по их именам, используя
<xsl:for-each>
в упрощенной таблице стилей.

Листинг 5.9. Сортировка данных

<HTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0">

 <HEAD>

<TITLE>

The Sorted Planets Table

</TITLE>

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

Семья. Измена. Развод

Высоцкая Мария Николаевна
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Семья. Измена. Развод

Звездная Кровь. Изгой

Елисеев Алексей Станиславович
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой

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

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

Искушение генерала драконов

Лунёва Мария
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Искушение генерала драконов

Шаг в бездну

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

Камень Книга одиннадцатая

Минин Станислав
11. Камень
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Камень Книга одиннадцатая

Никто и звать никак

Ром Полина
Фантастика:
фэнтези
7.18
рейтинг книги
Никто и звать никак

Возвышение Меркурия. Книга 14

Кронос Александр
14. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 14

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

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

Генерал Скала и ученица

Суббота Светлана
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Генерал Скала и ученица

Пограничная река. (Тетралогия)

Каменистый Артем
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.13
рейтинг книги
Пограничная река. (Тетралогия)

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Сумеречный Стрелок 2

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

Сумеречный Стрелок 10

Карелин Сергей Витальевич
10. Сумеречный стрелок
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Сумеречный Стрелок 10