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

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

Жанры

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

Шрифт:

<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>

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

Личный аптекарь императора. Том 6

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

Герцог и я

Куин Джулия
1. Бриджертоны
Любовные романы:
исторические любовные романы
8.92
рейтинг книги
Герцог и я

Ярар. Начало

Грехов Тимофей
1. Ярар
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ярар. Начало

Искатель 1

Шиленко Сергей
1. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Искатель 1

Вечный. Книга VII

Рокотов Алексей
7. Вечный
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Вечный. Книга VII

Интриганка

Шелдон Сидни
Приключения:
исторические приключения
9.24
рейтинг книги
Интриганка

Андер Арес

Грехов Тимофей
1. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Андер Арес

Врубель

Коган Дора Зиновьевна
Жизнь в искусстве
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Врубель

Эволюционер из трущоб. Том 10

Панарин Антон
10. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 10

Запечатанный во тьме. Том 3

NikL
3. Хроники Арнея
Фантастика:
уся
эпическая фантастика
фэнтези
5.00
рейтинг книги
Запечатанный во тьме. Том 3

Цикл "Идеальный мир для Лекаря". Компиляция. Книги 1-30

Сапфир Олег
Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Цикл Идеальный мир для Лекаря. Компиляция. Книги 1-30

Хозяин Теней 7

Петров Максим Николаевич
7. Безбожник
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Хозяин Теней 7

Я не князь. Книга XIII

Дрейк Сириус
13. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я не князь. Книга XIII

В лапах зверя

Зайцева Мария
1. Звериные повадки Симоновых
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
В лапах зверя