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

xsl:template match="RADIUS">


Вот результирующий документ — отметьте, что сохранилась только первая планета, Меркурий:

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

   The Planets Table

NameMassRadiusDay
Mercury.0553 (Earth = 1)1516 miles58.65 days

В следующем примере в элемент

Земли были добавлены атрибуты
COLOR
(цвет) и
POPULATED
(населена):

Earth

1

1

2107

1

1284

Как выбрать только элементы, имеющие оба атрибута,

COLOR
и
POPULATED
? Можно применить предикат "
[@COLOR and @POPULATED]
". Чтобы убрать другие элементы — так, чтобы правило по умолчанию не поместило их текст в результирующий документ, — можно применить предикат "
[not(@COLOR) or not(@POPULATED)]
", как показано в листинге 4.11.

Листинг 4.11. Выбор только элементов с двумя атрибутами COLOR и POPULATED

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

</code></pre></p><p><pre><code>     Colorful, Populated Planets</code></pre></p><p><pre><code>

     Colorful, Populated Planets

NameMassRadiusDay






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

</code></pre></p><p><pre><code>   Colorful, Populated Planets</code></pre></p><p><pre><code>

   Colorful, Populated Planets

NameMassRadiusDay
Earth1 (Earth = 1)2107 miles1 days

Этот документ показан на рис. 4.3.

Рис. 4.3. Применение предикатов XPath для проверки атрибутов


В следующем примере я копирую

planets.xml
в новый XML-документ и изменяю текст в элементе
Венеры на "
The Planet of Love
" (планета любви). Для этого я сначала копирую в результирующий документ все узлы и атрибуты:

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

 .

 .

 .

Теперь я добавлю новое правило, выбирающее элементы

с текстом "
Venus
" (Венера) по образцу "
NAME[text()='Venus']