XSLT — страница 45 из 124

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

Вот результирующий документ:

</code></pre></p><p><pre><code>   Planets</code></pre></p><p><pre><code>

Mercury

Venus

Earth

Как вы видели, при помощи

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

Элемент

Элемент

позволяет применять тело шаблона в цикле снова и снова для всех элементов набора узлов. С технической точки зрения, он работает с набором узлов, который возвращает выражение XPath и выполняет одно и то же действие с каждым узлом в наборе. При каждом шаге цикла тело шаблона применяется к следующему узлу из набора узлов, что дает возможность легко обрабатывать несколько узлов.

ПРОТИВ

Вы могли заметить, что это описание практически такое же, как и у элемента , и я сравню элементы и через несколько страниц.

У элемента

один атрибут:

• 

select
(обязательный). Принимает значение выражения XPath, возвращающее набор узлов, который нужно обработать в цикле.

Элемент может содержать ноль или более элементов

, за которыми следует тело шаблона. Работу с элементом
мы изучим позже в этой главе.

В теле шаблона функция

position
возвращает позицию текущего узла в наборе узлов, a
last
возвращает число узлов в наборе. Если
не используется, узлы обрабатываются в порядке документа (в порядке, в котором они перечислены в документе); если же используется элемент
, набор узлов будет сначала отсортирован в порядке, заданном этим элементом.

Предположим, нам нужно отформатировать все названия планет, заключив их в элементы HTML

<Р>
, — это можно сделать следующим образом:

<Р>

Но что делать, если у некоторых планет по два названия, как, например:

Mercury

Closest planet to the sun

.0553

58.65

1516

.983

43.4

Это проблема, поскольку атрибут

select
элемента
сам по себе выберет только первый элемент
. Чтобы пройти в цикле все возможные варианты, вместо него следует применить элемент
(листинг 5.7).

Листинг 5.7. Применение

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


Эта таблица стилей охватывает все элементы

, помещает их значения в элемент
<Р>
и добавляет их в выходной документ следующим образом:

Mercury

Closest planet to the sun

Venus

Earth

Вот еще один пример, впервые появившийся в главе 3, «Создание и применение шаблонов», где при помощи элемента

в цикле перебирались все атрибуты элемента:

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

Следующий пример появился в главе 2, «Создание и применение таблиц стилей». Это упрощенная таблица стилей, в которой нельзя использовать какие-либо элементы высокого уровня, то есть нельзя использовать

или
, однако можно пройти по узлам в цикле при помощи
:

</code></pre></p><p><pre><code>   The Planets Table</code></pre></p><p><pre><code>

   The Planets Table

NameMassRadiusDay

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

planets.xml