>
дает указание процессору XSLT обрабатывать все совпадающие шаблоны для дочерних узлов контекстного узла. Элемент
дает возможность явно указать, когда следует закончить обработку дочерних узлов, а это имеет решающее значение при вставке их данных в нужное место в HTML-таблице.Один важный момент часто вызывает затруднения: элемент
по умолчанию применяет шаблоны только к дочерним узлам контекстного или выбранного узла или набора узлов. Это выглядит довольно безобидно, но многие люди забывают о том, что атрибуты не считаются дочерними узлами элементов и также ими не являются объявления пространств имен. Это значит, что для обработки как элементов, так и атрибутов следует осуществить еще один или два дополнительных шага, что мы увидим далее в этой главе.В следующем примере мы поместим элемент
туда, куда нам требуется вставить данные из элементов
в таблицу HTML. Я также добавил новый шаблон для обработки элементов
:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
Name
Mass
Radius
Day
.
.
.
В новом шаблоне, обрабатывающем элементы
, я должен извлечь данные из каждого элемента
, то есть восстановить значения в дочерних элементах элемента
, таких как
,
и т.д.:
Mercury
.0553
58.65
1516
.983
43.4
.
.
.
Это можно сделать при помощи элемента
.Доступ к значениям узлов
Элемент
записывает в результирующий документ строковое значение выражения; в частности, с его помощью можно возвратить значение узла, которым для элемента будет заключенный в элемент текст. Атрибуту выбора элемента
можно присвоить выражение XPath, задающее узел или набор узлов. В шаблоне, задающем элементы
, обратиться к дочернему элементу
можно при помощи выражения XPath "child::MASS
". Как мы увидим в главе 4, выражения XPath можно писать разными способами: например, вместо "child::MASS
" можно просто написать "MASS
". Таким образом, получить данные дочерних элементов, таких как
,
и т.д., можно следующим способом (листинг 3.1).Листинг 3.1. Полная версия planets.xsl
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
<Н1>
The Planets Table
Н1>
Name
Mass
Radius
Day
Создание образцов выбора
Как вы могли ожидать, исходя из того, что "
child::MASS
" можно представить в виде "MASS
" и применения шаблонов, таких как "/
", "/PLANETS
" и т.д., вплотную познакомиться с созданием образцов выбора не так-то просто — этому посвящена вся глава 4.Образцы выбора (match pattern) являются подмножеством полного языка XPath, их можно использовать в элементах
>,
и
. В частности, в образец можно установить атрибут match у
и
, и атрибуты count
и from
элемента
. В следующем списке приведен ряд примеров образцов выбора, много других примеров будет показано в главе 4 при подробном обсуждении использования XPath для выбора узлов и атрибутов:• "
/
" выбирает корневой узел;• "
*
" выбирает элементы узлов (но не всех узлов, как зачастую ошибочно полагают);• "
PLANET
" выбирает элементы
;• "
PLANET/MASS
" выбирает все элементы
, дочерние для элемента
;• "
//PLANET
" выбирает все элементы
, производные от корневого узла;• "
.
" выбирает текущий узел (технически это не образец выбора, а выражение XPath, как мы увидим в главе 7).Образцы можно также использовать в атрибуте
select
элементов
,
,
,
и
; фактически атрибут select
этих элементов может содержать полные выражения XPath, а не только образцы выбора. Атрибут