XSLT
Шрифт:
<?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'"/>
Поделиться:
Популярные книги
Ваше Сиятельство 8
8. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 2
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Белый Волк
2. Викинг
Приключения:
исторические приключения
9.12
рейтинг книги
Кодекс Охотника. Книга XXXIII
33. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Курс 1. Октябрь
2. Маркатис
Фантастика:
аниме
фэнтези
сказочная фантастика
5.00
рейтинг книги
Старый, но крепкий 5
5. Культивация без насилия
Фантастика:
рпг
аниме
уся
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIII
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Его звали Тони. Книга 5
5. Щенки косуль
Фантастика:
городское фэнтези
технофэнтези
попаданцы
7.00
рейтинг книги
Враг из прошлого тысячелетия
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Найденыш
2. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Тринадцатый XI
11. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Мажор. Дилогия.
Фантастика:
боевая фантастика
8.05
рейтинг книги
Черный рынок
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Шайтан Иван 6
6. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
7.00