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

>

Venus

.815

116.75

3716

.943

66.8

Earth

The mass of Earth is set to 1.

1

2107

1

128.4

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

Ось

preceding
содержит все узлы, расположенные перед контекстным узлом в соответствии с установленным в документе порядком, исключая всех предков контекстного узла, а также исключая узлы атрибутов и узлы пространств имен.

Пусть, например, мне нужно задать для содержимого элемента

текст «This planet is farther from the Sun than Mercury.» (Эта планета расположена дальше от Солнца, чем Меркурий.), если рассматриваемая планета действительно дальше от Солнца, чем Меркурий. Один из способов сделать это — проверить, расположен ли Меркурий перед рассматриваемой планетой в соответствии с установленным в документе порядком, при помощи оси
preceding
(листинг 7.13).

Листинг 7.13. Применение оси preceding

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

This planet is farther from the Sun than Mercury.

Если текущая планета расположена после Меркурия, я могу вставить сообщение в ее элемент

. Результат следующий:

Mercury

.0553

58.65

1516

.983

43.4

Venus

.815

116.75

3716

.943

This planet is farther from the Sun than Mercury.

Earth

1

1

2107

1

This planet is farther from the Sun than Mercury.

Применение оси preceding-sibling

Ось

preceding-sibling
содержит всех предшествующих братьев контекстного узла. Заметьте, что если контекстным узлом является узел атрибута или узел пространства имен, ось
preceding-sibling
будет пуста.

Что, если, например, вам нужно создать шаблон, который будет выбирать только элементы

в элементе
Меркурия? Для этого можно проверить, существуют ли братья, предшествующие элементу
, которые являются элементами
со строковым значением «
Mercury
». Если применить ось
preceding-sibling
(листинг 7.14), поиск будет ограничен текущим элементом
, что означает, что Меркурий не будет выбран, если вы только не находитесь в нужном элементе
.

Листинг 7.14. Применение оси preceding-sibling

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

This is the planet Mercury, closest to the Sun.


А вот результат:

Mercury

.0553

58.65

1516

.983

This is the planet Mercury, closest to the Sun.

Venus

.815

116.75

3716

.943

66.8

Earth

1

1

2107

1

128.4

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

Ось

self
содержит только контекстный узел. В соответствии с одним из сокращений XPath, как мы увидим дальше, вместо «
self::node()
» можно использовать «.».

Эту ось полезно иметь в виду, поскольку, как вы помните из главы 4, если не задать ось, осью по умолчанию будет

child::
, а в некоторых случаях вам может понадобиться обратиться к действующему узлу. Например,