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

Меркурия:
Sorry, Mercury has blown up and is no longer available.
(Извините, но Меркурий взорвался и больше не доступен.). Чтобы найти Меркурий, мне достаточно только проверить, имеет ли какой-либо потомок элемента
строковое значение «
Mercury
», что я сделаю при помощи выражения XPath внутри предиката выбора.

Листинг 7.6. Применение оси descendant

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

Sorry. Mercury has blown up and is no longer available.


Вот результирующий документ, дополненный новым элементом

только для Меркурия:

Mercury

.0553

58.65

1516

.983

43.4

Sorry, Mercury has blown up and is no longer available.

Venus

.815

116.75

3716

.943

66.8

 .

 .

 .

Применение оси descendant-or-self

Ось

descendant-or-self
содержит всех потомков контекстного узла и сам контекстный узел. Заметьте, однако, что она не содержит атрибутов и узлов пространств имен.

В следующем примере (листинг 7.7) демонстрируется работа с осью. В этом случае я создал упрощенную таблицу стилей (подробнее об упрощенных таблицах стилей см. главу 2), которая обрабатывает все элементы с использованием потомков, генерируя уже знакомую нам HTML-таблицу данных о планетах.

Листинг 7.7. Применение оси descendant-or-self

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

   The Planets Table

NameMassRadiusDay

Вот и все. Я применил здесь упрощенную таблицу стилей, чтобы подчеркнуть, что при помощи таких осей потомков, как

descendant
или
descendant-or-self
, вы можете автоматически обрабатывать все выбираемые узлы, во многом аналогично тому, как это делают элементы
или
.

Применение оси following

Ось following (следующий) содержит все узлы, расположенные после контекстного узла в соответствии с установленным в документе порядком (другими словами, в порядке, в котором они появляются в документе, начиная с его начала), исключая всех потомков контекстного узла, а также исключая узлы атрибутов и пространств имен.

В этом примере (листинг 7.8) я выбираю каждый элемент и копирую все последующие элементы в результирующий документ.

Листинг 7.8. Применение оси following

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

Далее показан результат. Обратите внимание на то, что, когда этот шаблон выбирает элемент

Меркурия, он копирует все последующие элементы — то есть Венеру, затем всех потомков Венеры, далее Землю и затем всех потомков Земли. После этого он выбирает элемент
Венеры и копирует все следующие элементы, то есть Землю и всех потомков Земли:

Venus

.815

116.75

3716

.943

66.8

Venus

.815

116.75

3716

.943

66.8

Earth

1

1

2107

1

128.4

Earth

1

1

2107

1

128.4