Меркурия: 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
The Planets Table
The Planets Table
Н1>
Name
Mass
Radius
Day
Вот и все. Я применил здесь упрощенную таблицу стилей, чтобы подчеркнуть, что при помощи таких осей потомков, как
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