Чтение онлайн

на главную - закладки

Жанры

Холзнер Стивен

Шрифт:

<xsl:value-of select="NAME"/>

<xsl:if test="position!=last">. </xsl:if>

<xsl:if test="position=last-1">and </xsl:if>

<xsl:if test="position=last">.</xsl:if>

 </xsl:template>

</xsl:stylesheet>

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

<NAME>
пустым:

<?xml version="1.0"?>

<?xml-stylesheet type="text/xml" href="#"?>

<PLANETS>

 <PLANET>

<NAME>Mercury</NAME>

<MASS UNITS="(Earth = 1)">.0553</MASS>

<DAY UNITS="days">58.65</DAY>

<RADIUS UNITS="miles">1516</RADIUS>

<DENSITY UNITS="(Earth = 1)">.983</DENSITY>

<DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->

 </PLANET>

 <PLANET>

<NAME></NAME>

<MASS UNITS="(Earth = 1)">.815</MASS>

<DAY UNITS="days">116.75</DAY>

<RADIUS UNITS="miles">3716</RADIUS>

<DENSITY UNITS="(Earth = 1)">.943</DENSITY>

<DISTANCE UNITS="million miles">66.8</DISTANCE><!--B перигелии-->

 </PLANET>

 .

 .

 .

Вот как происходит обработка примера в 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 нет элемента
<xsl:else>
. Для задания альтернативных ветвей выполнения XSLT служит элемент
<xsl:choose>
.

Элементы <xsl:choose>, <xsl:when> и <xsl:otherwise>

Элемент

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

У элемента

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

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

<xsl:choose>
заключаются элементы
<xsl:when>
, каждый с условием
true/false
. Применяется тело шаблона в первом элементе
<xsl:when>
, чье условие имеет значение
true
, все остальные не применяются. Последним элементом внутри элемента
<xsl:choose>
может быть элемент
<xsl:otherwise>
тело шаблона внутри этого элемента применяется, если ни одно из предыдущих условий
<xsl:when>
не имело значения
true
:

<xsl:choose>

 <xsl:when test="expression1">

<!--template-body 1-->

 </xsl:when>

 <xsl:when test="expression">

<!-- template-body 2-->

 </xsl:when>

 <xsl:when test="expression3">

<!--template-body 3-->

 </xsl:when>

 <xsl:otherwise>

<!--template body 4-->

 </xsl:otherwise>

</xsl:choose>

В предыдущем разделе для осуществления этого преобразования нам потребовалось три элемента

<xsl:if>
:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

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

 <xsl:output method="xml"/>

 <xsl:template match="PLANETS">

<DOCUMENT>

<TITLE>

The Planets

</TITLE>

<PLANETS>

The first three planets are: <xsl:apply-templates select="PLANET"/>

</PLANETS>

</DOCUMENT>

 </xsl:template>

 <xsl:template match="PLANET">

<xsl:if test="NAME[not(text)]">

<xsl:message terminate="yes">

Each planet must have a name!

</xsl:message>

</xsl:if>

<xsl:value-of select="NAME"/>

<xsl:if test="position!=last">, </xsl:if>

<xsl:if test="position=last-1>and </xsl:if>

<xsl:if test="position=last">.</xsl:if>

Поделиться:
Популярные книги

Московское золото и нежная попа комсомолки. Часть Пятая

Хренов Алексей
5. Летчик Леха
Фантастика:
попаданцы
5.00
рейтинг книги
Московское золото и нежная попа комсомолки. Часть Пятая

Газлайтер. Том 2

Володин Григорий
2. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 2

Девять драконов

Скотт Джастин
Детективы:
триллеры
5.00
рейтинг книги
Девять драконов

Бастард Императора. Том 12

Орлов Андрей Юрьевич
12. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 12

Дважды одаренный. Том III

Тарс Элиан
3. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
юмористическое фэнтези
5.00
рейтинг книги
Дважды одаренный. Том III

Ермак. Противостояние. Книга одиннадцатая

Валериев Игорь
11. Ермак
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Ермак. Противостояние. Книга одиннадцатая

Меткий стрелок. Том II

Вязовский Алексей
2. Меткий стрелок
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Меткий стрелок. Том II

Тринадцатый IX

NikL
9. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Тринадцатый IX

Неучтенный элемент. Том 3

NikL
3. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 3

Том 11. Рассказы. Очерки. Публицистика. 1894-1909

Твен Марк
Проза:
классическая проза
5.00
рейтинг книги
Том 11. Рассказы. Очерки. Публицистика. 1894-1909

На границе империй. Том 3

INDIGO
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 3

Травница Его Драконейшества

Рель Кейлет
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Травница Его Драконейшества

Я спас ссср! том iv

Вязовский Алексей
4. Я спас СССР
Фантастика:
альтернативная история
6.62
рейтинг книги
Я спас ссср! том iv

Ваше Сиятельство 7

Моури Эрли
7. Ваше Сиятельство
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Ваше Сиятельство 7