XSLT
Шрифт:
У элемента
<xsl:for-each>
один атрибут: •
select
(обязательный). Принимает значение выражения XPath, возвращающее набор узлов, который нужно обработать в цикле. Элемент может содержать ноль или более элементов
<xsl:sort>
, за которыми следует тело шаблона. Работу с элементом <xsl:sort>
мы изучим позже в этой главе. В теле шаблона функция
position
возвращает позицию текущего узла в наборе узлов, a last
возвращает число узлов в наборе. Если <xsl:sort>
<xsl:sort>
, набор узлов будет сначала отсортирован в порядке, заданном этим элементом. Предположим, нам нужно отформатировать все названия планет, заключив их в элементы HTML
<Р>
, — это можно сделать следующим образом: <xsl:template match="PLANET">
<Р>
<xsl:value-of select="NAME"/>
</xsl:template>
Но что делать, если у некоторых планет по два названия, как, например:
<PLANET>
<NAME>Mercury</NAME>
<NAME>Closest planet to the sun</NAME>
<MASS UNITS="(Earth = 1)">.0553</MASS>
<DAY UNITS="days">58.65</DAY>
<RADIUS UNITS="miles">1516</RADIUS>
<DENSITY UNITS="(Earth = 1)">.983</DENSITY>
<DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->
</PLANET>
Это проблема, поскольку атрибут
select
элемента <xsl:value-of>
сам по себе выберет только первый элемент <NAME>
. Чтобы пройти в цикле все возможные варианты, вместо него следует применить элемент <xsl:for-each>
(листинг 5.7). Листинг 5.7. Применение <xsl:for-each>
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="PLANETS">
<HTML>
<xsl:apply-templates/>
</HTML>
</xsl:template>
<xsl:template match="PLANET">
<xsl:for-each select="NAME">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Эта
<NAME>
, помещает их значения в элемент <Р>
и добавляет их в выходной документ следующим образом: <HTML>
Mercury
Closest planet to the sun
Venus
Earth
</HTML>
Вот еще один пример, впервые появившийся в главе 3, «Создание и применение шаблонов», где при помощи элемента
<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="*">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Следующий пример появился в главе 2, «Создание и применение таблиц стилей». Это упрощенная таблица стилей, в которой нельзя использовать какие-либо элементы высокого уровня, то есть нельзя использовать
<xsl:template>
или <xsl:apply-templates>
, однако можно пройти по узлам в цикле при помощи <xsl:for-each>
: <HTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0">
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<xsl:for-each select="//PLANET">
<TR>
<TD><xsl:value-of select="NAME"/></TD>
<TD><xsl:value-of select="MASS"/></TD>
Поделиться:
Популярные книги
Замуж второй раз, или Ещё посмотрим, кто из нас попал!
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Протокол "Наследник"
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сердце Дракона. Том 11
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Вперед в прошлое!
1. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Шесть принцев для мисс Недотроги
3. Мисс Недотрога
Фантастика:
фэнтези
7.92
рейтинг книги
Хочу тебя любить
Любовные романы:
современные любовные романы
5.67
рейтинг книги
Огни Аль-Тура. Желанная
3. Эйнар
Любовные романы:
любовно-фантастические романы
эро литература
5.25
рейтинг книги
Начальник милиции 2
2. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Мастер...
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Сумеречный стрелок 8
8. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Я до сих пор не князь. Книга XVI
16. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Обыкновенные ведьмы средней полосы
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Метаморфозы Катрин
Фантастика:
фэнтези
8.26
рейтинг книги
Идеальный мир для Социопата
1. Социопат
Фантастика:
боевая фантастика
рпг
постапокалипсис
6.17