Venus
.815
116.75
3716
.943
66.8
Earth
1
1
2107
1
128.4
Earth
1
1
2107
1
128.4
Ось namespace
содержит узлы пространств имен контекстного узла. Заметьте, что эта ось пуста, если контекстным узлом не является элемент. У элемента присутствует узел пространства имен для:
• каждого атрибута элемента, чье имя начинается с «xmlns:»;
• каждого атрибута элемента-предка, чье имя начинается с «xmlns:» (конечно, если сам элемент или ближайший предок не объявит пространство имен заново);
• атрибута xmlns
, если элемент или предок имеет атрибут xmlns
.
В следующем примере (листинг 7.10) я хочу отобразить пространство имен элемента в результирующем документе, и в исходном документе я присвоил пространству имен значение «http://www.starpowder.com».
Листинг 7.10. planets.xml с объявлением пространства имен
Mercury
.0553
58.65
1516
.983
43.4
.
.
.
Вот таблица стилей (листинг 7.11), в которой я проверяю пространства имен, используемые в элементе .
Листинг 7.11. Применение оси namespace в planets.xml
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
А вот результирующий документ (заметьте, что вид документа может меняться в зависимости от процессора XSLT):
http://www.starpowder.com
Ось parent (родитель) содержит родителя (и только родителя) контекстного узла, если таковой имеется.
Предположим, что я хочу изменить содержимое элемента Земли на «The mass of Earth is set to 1.>> (Масса Земли принимается за 1). В следующем шаблоне (листинг 7.12) для этого проверяется, содержит ли родитель элемента элемент со строковым значением «Earth».
Листинг 7.12. Применение оси parent
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The mass of Earth is set to 1.
И вот результат:
Mercury
.0553
58.65
1516
.983
43.4
Venus
.815
116.75
3716
.943
66.8
Earth
The mass of Earth is set to 1.
1
2107
1
128.4
Ось 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
Читать дальше