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

HEAD>

</code></pre></p><p><pre><code>     Planets</code></pre></p><p><pre><code>


   is planet number  from the sun.


Вот результат — как видите, элемент


появляется только после последней перечисленной планеты:

</code></pre></p><p><pre><code>   Planets</code></pre></p><p><pre><code>

   Mercury is planet number 1 from the sun.

   Venus is planet number 2 from the sun.

   Earth is planet number 3 from the sun.


Рассмотрим еще один пример — преобразование XML-XML, в котором перечисляются планеты из

planets.xml
. Однако я хочу, чтобы выводилось не просто «The first three planets are: Mercury Venus Earth» (первые три планеты: Меркурий Венера Земля), a «The first three planets are: Mercury, Venus, and Earth». Необходимые знаки пунктуации можно добавить, определяя текущий элемент при помощи функции
position
и проверяя позицию при помощи
(листинг 5.2).

Листинг 5.2. Второй пример применения

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

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

    The first three planets are: 


, 

and 

.

Вот результат:

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

  The first three planets are: Mercury, Venus, and Earth

Как видите, я смог добавить правильные знаки пунктуации, определяя место в документе при помощи

.

При помощи

можно также обнаруживать ошибки во время преобразования. Например, при помощи
можно вывести сообщение, есть ли в
planets.xml
элемент
(листинг 5.3).

Листинг 5.3. Обнаружение ошибок при помощи

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

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

    The first three planets are: 


    Each planet must have a name!

. 

and 

.

Чтобы проверить работу этого кода, я задал один из элементов

пустым:

Mercury

.0553

58.65

1516

.983

43.4

.815

116.75

3716

.943

66.8

 .

 .

 .

Вот как происходит обработка примера в Xalan:

C:\planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL errors.xsl -OUT new.xml

file:///C:/XSL/w.xsl: Line 18: Column 38: Each planet must have a name!

XSLT Error (javax.xml.transform.TransformerException): Stylesheet directed termination

Если вы знакомы с конструкцией

if
в языках программирования, вы знаете, что инструкция
if
обычно сопровождается инструкцией
else
, которая выполняется при ложности условия в
if
. Но в XSLT нет элемента
. Для задания альтернативных ветвей выполнения XSLT служит элемент
.

Элементы , и

Элемент

похож на оператор Java
switch
, который позволяет сравнивать значение условия с несколькими возможными вариантами.

У элемента

нет атрибутов. Он содержит один или более элементов
и (не обязательно) один элемент
, который в случае применения должен стоять последним.

Вот как это работает: в элемент

заключаются элементы