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

>

</code></pre></p><p><pre><code>     The Planets Table</code></pre></p><p><pre><code>

     The Planets Table

NameMassRadiusDay





Этот код только воспроизводит то, что мы уже делали ранее в предыдущей версии

planets.xsl
, использующей
,
и т.д., то есть читающей и отображающей данные каждого элемента
,
и
. Теперь же, когда у нас есть отдельный шаблон для каждого из этих элементов, можно осуществить дополнительную обработку — например чтение значений атрибутов.

Чтение значений атрибутов

Чтобы получить доступ к значению атрибута при помощи XPath, нужно добавить к имени атрибута префикс @, например: "

@src
", "
@height
", "
@width
" и т.д.

Для выбора любого атрибута можно применить выражение "

@*
". Чтобы сослаться на атрибут
UNITS
в каждом элементе
,
и
, следует использовать выражение "
@UNITS
". Следовательно, получить значения и отобразить единицы (unit) каждого измерения в
planets.xml
можно так (листинг 3.3).

Листинг 3.3. Чтение значений атрибутов

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

</code></pre></p><p><pre><code>     The Planets Table</code></pre></p><p><pre><code>

     The Planets Table

NameMassRadiusDay





Результаты работы показаны на рис. 3.1, Как видите, теперь мы извлекли строковое значение атрибута UNITS и отобразили его.

Рис. 3.1. Вывод значений атрибутов, первый вариант


Рисунок 3.1 не совсем точен: обратите внимание на то, что между значением и соответствующей единицей измерения в таблице нет пробела. Процессор XSLT просто поместил в результирующее дерево текст без каких-либо разделителей между текстовыми узлами. Хотя это в точности соответствует требованиям рекомендации XSLT, нам бы хотелось, чтобы элементы таблицы выглядели как «1516 miles», а не «1516miles». Как нам добавить этот дополнительный пробел?

Элемент

Работа с пробелами всегда обсуждается при рассмотрении XSLT, и в данной главе я уделю этой теме некоторое время. Вставить единственный пробел несложно при помощи элемента

, который используется для вставки символьного текста непосредственно в дерево вывода. У этого элемента только один атрибут:

• 

disable-output-escaping
. Устанавливается в
yes
для того, чтобы такие символы, как < и >, выводились буквально, а не как
<
и
>
. По умолчанию установлен в
no
.

Этот элемент может содержать только текстовый узел.

Текстовые узлы создаются при помощи элемента

, позволяющего по ходу дела замещать элементы целиком на текст. Одна из целей применения
— сохранить символы-разделители, как в следующем примере (листинг 3.4), в котором элемент
используется для вставки пробелов.

Листинг 3.4. Вставка пробелов в таблицу стилей

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

</code></pre></p><p><pre><code>     The Planets Table</code></pre></p><p><pre><code>

     The Planets Table

NameMassRadiusDay

<