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

на главную

Жанры

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

Шрифт:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

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

 <xsl:template match="/">

<xsl:variable name="result">

<xsl:call-template name="factorial">

<xsl:with-param name="value" select="6"/>

</xsl:call-template>

</xsl:variable>

6! = <xsl:value-of select="$result"/>

 </xsl:template>

 .

 .

 .

Следующий

пример демонстрирует, как можно реализовать шаблон
factorial
, чтобы для вычисления факториала он вызывал сам себя. На языке программирования я мог бы написать рекурсивный вызов как
n!=n*factorial(n-1)
, но у нас нет оператора присваивания; поэтому, когда я вычисляю
factorial(n-1)
, я сохраняю это значение в новой переменной
temp
и на каждом шаге возвращаю значение
n*$temp
:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

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

 <xsl:template match="/">

<xsl:variable name="result">

<xsl:call-template name="factorial">

<xsl:with-param name="value" select="6"/>

</xsl:call-template>

</xsl:variable>

6! = <xsl:value-of select="$result"/>

 </xsl:template>

 <xsl:template name="factorial">

<xsl:param name="value"/>

<xsl:choose>

<xsl:when test="$value=1">

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

</xsl:when>

<xsl:otherwise>

<xsl:variable name="temp">

<xsl:call-template name="factorial">

<xsl:with-param name="value" select="$value - 1"/>

</xsl:call-template>

</xsl:variable>

<xsl:value-of select="$temp * $value"/>

</xsl:otherwise>

</xsl:choose>

 </xsl:template>

</xsl:stylesheet>

Вот

результирующий документ:

<?xml version="1.0" encoding="utf-8"?>

6! = 720

Как видите, это можно сделать, по крайней мере, в XSLT 1.0, в котором разрешены использованные здесь фрагменты результирующего дерева.

Шаблон: значение по умолчанию

Как я говорил ранее, в случае задания параметру значения при объявлении, оно может быть перекрыто, если вы зададите другое значение в элементе

<xsl:with-param>
. Но если другого значения не указывать, исходное значение выступит в роли значения по умолчанию.

Следующий пример видоизменяет рассмотренный ранее пример «COLORS». Шаблон имеет параметр

COLOR
, но я могу вызвать шаблон, не устанавливая
COLOR
в какое-либо определенное значение:

<xsl:template match="PLANET">

 <xsl:if test="NAME='Mercury'">

<xsl:call-template name="COLORS">

<xsl:with-param name="COLOR" select="'RED'"/>

</xsl:call-template>

 </xsl:if>

 <xsl:if test="NAME='Venus'">

<xsl:call-template name="COLORS">

<xsl:with-param name="COLOR" select="'GREEN'"/>

</xsl:call-template>

 </xsl:if>

 <xsl:if test="NAME='Earth'">

<xsl:call-template name="COLORS">

</xsl:call-template>

 </xsl:if>

</xsl:template>

В этом случае параметр

COLOR
принимает значение по умолчанию«
blue
» (голубой), заданное в элементе
<xsl:param>
в шаблоне «COLORS»:

<xsl:template match="PLANET">

 <xsl:if test="NAME='Mercury'">

<xsl:call-template name="COLORS">

<xsl:with-param name="COLOR" select="'RED'"/>

</xsl:call-template>

 </xsl:if>

 <xsl:if test="NAME='Venus'">

<xsl:call-template name="COLORS">

<xsl:with-param name="COLOR" select="'GREEN'"/>

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

Личник

Валериев Игорь
3. Ермак
Фантастика:
альтернативная история
6.33
рейтинг книги
Личник

Книга пятая: Древний

Злобин Михаил
5. О чем молчат могилы
Фантастика:
фэнтези
городское фэнтези
мистика
7.68
рейтинг книги
Книга пятая: Древний

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Обгоняя время

Иванов Дмитрий
13. Девяностые
Фантастика:
попаданцы
5.00
рейтинг книги
Обгоняя время

Барон играет по своим правилам

Ренгач Евгений
5. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Барон играет по своим правилам

Идеальный мир для Лекаря 12

Сапфир Олег
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 12

Бальмануг. Студентка

Лашина Полина
2. Мир Десяти
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Бальмануг. Студентка

Возвышение Меркурия. Книга 12

Кронос Александр
12. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 12

Маленькая хозяйка большого герцогства

Вера Виктория
2. Герцогиня
Любовные романы:
любовно-фантастические романы
7.80
рейтинг книги
Маленькая хозяйка большого герцогства

На границе империй. Том 7. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 7. Часть 4

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Ведьма и Вожак

Суббота Светлана
Фантастика:
фэнтези
7.88
рейтинг книги
Ведьма и Вожак

Мама из другого мира. Дела семейные и не только

Рыжая Ехидна
4. Королевский приют имени графа Тадеуса Оберона
Любовные романы:
любовно-фантастические романы
9.34
рейтинг книги
Мама из другого мира. Дела семейные и не только