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>
Поделиться:
Популярные книги
Имперец. Том 4
3. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Бастард
1. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Проклятый Лекарь. Том 2
2. Анатомия Тьмы
Фантастика:
фэнтези
попаданцы
7.00
рейтинг книги
Мальвиль
Фантастика:
социально-философская фантастика
научная фантастика
альтернативная история
8.29
рейтинг книги
Московское золото и нежная попа комсомолки. Часть Пятая
5. Летчик Леха
Фантастика:
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XII
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Закрытые Миры
Вселенная EVE Online
Фантастика:
фэнтези
5.86
рейтинг книги
Газлайтер. Том 3
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Я снова не князь! Книга XVII
17. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Геном хищника. Книга пятая
5. Я - Легенда!
Фантастика:
рпг
фэнтези
попаданцы
6.00
рейтинг книги
Гримуар темного лорда IV
4. Гримуар темного лорда
Фантастика:
фэнтези
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 14
14. Черный маг императора
Фантастика:
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сирийский рубеж 2
6. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Бастард Императора. Том 6
6. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00