XSLT
Шрифт:
<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>
Поделиться:
Популярные книги
Средневековая история. Тетралогия
Средневековая история
Фантастика:
фэнтези
попаданцы
9.16
рейтинг книги
Хозяйка Междуречья
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Назад в СССР 5
5. Курсант
Фантастика:
попаданцы
альтернативная история
6.64
рейтинг книги
Столичный доктор. Том II
2. Столичный доктор
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Игрок, забравшийся на вершину. Том 8
8. Игрок, забравшийся на вершину
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Довлатов. Сонный лекарь
1. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 9
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Система Возвышения. Второй Том. Часть 1
2. Система Возвышения
Фантастика:
фэнтези
7.92
рейтинг книги
Чужое наследие
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Князь Мещерский
3. Зауряд-врач
Фантастика:
альтернативная история
8.35
рейтинг книги
Совок 2
2. Совок
Фантастика:
альтернативная история
7.61
рейтинг книги
Царь поневоле. Том 2
5. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Система Возвышения. (цикл 1-8) - Николай Раздоров
Система Возвышения
Фантастика:
боевая фантастика
4.65
рейтинг книги
Системный Нуб
1. Ловец душ
Фантастика:
боевая фантастика
рпг
5.00