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