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

". Хотя элементы
удовлетворяют обоим правилам этой таблицы стилей, правило с образцом "
NAME[text()='Venus']
" осуществляет более узкий выбор, поэтому для элемента
Венеры процессор XSLT применит его:

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


   The Planet of Love

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

Mercury

.0553

58.65

1516

.983

43.4

   The Planet of Love

.815

116.75

3716

.943

66.8

Earth

1

1

2107

1

128.4

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

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

   The Planet of Love

Имеет смысл привести как можно больше примеров — примеров XPath или образцов выбора никогда не бывает слишком много. Ниже приведен содержательный ряд примеров образцов выбора:

• 

PLANET
выбирает дочерние элементы
контекстного узла;

• 

/PLANETS
выбирает корневой элемент
документа;

• 

*
выбирает все дочерние элементы контекстного узла;

• 

PLANET[3]
выбирает третьего ребенка
контекстного узла;

• 

PLANET[last()]
выбирает последнего ребенка
контекстного узла;

• 

PLANET[NAME]
выбирает детей
контекстного узла, имеющих детей
;

• 

PLANET[DISTANCE]/NAME
выбирает все элементы
элементов
, содержащих по крайней мере один элемент
;

• 

PLANET[DISTANCE]/PLANET[DAY]
выбирает все элементы
элементов
, в которых элемент
содержит по крайней мере один элемент
, и элемент
содержит по крайней мере один элемент
;

• 

РLANETS[РLАNET/DAY]
выбирает все элементы
, содержащие элементы
как минимум с одним элементом
;

• 

PLANET[DISTANCE][NAME]
выбирает все элементы
, имеющие элементы
и
;

• 

PLANETS/PLANET[last()]
выбирает последний элемент
в каждом элементе
;

• 

*/PLANET
выбирает всех внуков
контекстного узла;

• 

/PLANETS/PLANET[3]/NAME[2]
выбирает второй элемент
третьего элемента
элемента
;

• 

//PLANET
выбирает всех потомков
корня документа;

• 

PLANETS//PLANЕТ
выбирает потомков элемента
детей элемента
контекстного узла;

• 

//PLANET/NAME
выбирает все элементы
, дочерние по отношению к родителю
;

• 

РLАNETS//PLАNET/DISTАNСЕ//РЕRIНЕLION
выбирает элементы
везде внутри элемента
элемента
, везде внутри элемента
;

• 

@UNITS
выбирает атрибут
UNITS
контекстного узла;

• 

@*
выбирает все атрибуты контекстного узла;

• 

*[@UNITS]
выбирает все элементы с атрибутом
UNITS
;

• 

DENSITY/@UNITS
выбирает атрибут
UNITS
в элементах
;

• 

PLANET[not(@COLOR) or not(@SIZE)]
выбирает элементы
, не имеющие обоих атрибутов
COLOR
и
SIZE
;

• 

PLANETS[@STAR="Sun"]//DENSITY
выбирает любой элемент
с элементом-предком
, имеющим атрибут
STAR
со значением "
Sun
";

• 

PLANET[NAME="Venus"]
выбирает детей
контекстного узла, имеющих детей
с текстом "
Venus
";

• 

PLANET[NAME[1]="Venus"]
выбирает все элементы
<