Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

 </xsl:template>

 <xsl:template name="less-than">

<xsl:param name="x"/>

<xsl:param name="y"/>

<xsl:value-of select="number($x &lt; $y)"/>

 </xsl:template>

</xsl:stylesheet>

Пример

Простым примером шаблона-функции может быть шаблон, который форматирует дату в нужном виде, например 7 августа 93 года как "

07-Aug-1993
".

В качестве параметров этот шаблон будет принимать численные значения дня, месяца и года. Год, имеющий значение меньшее 25, мы будем считать принадлежащим новому тысячелетию.

Листинг 11.8. Шаблон, форматирующий дату

<xsl:template name="format-date">

 <xsl:param name="day"/>

 <xsl:param name="month"/>

 <xsl:param name="year"/>

 <xsl:value-of select="format-number($day, '00')"/>

 <xsl:text>-</xsl:text>

 <xsl:choose>

<xsl:when test="$month = 1">Jan</xsl:when>

<xsl:when test="$month = 2">Feb</xsl:when>

<xsl:when test="$month = 3">Mar</xsl:when>

<xsl:when test="$month = 4">Apr</xsl:when>

<xsl:when test="$month = 5">May</xsl:when>

<xsl:when test="$month = 6">Jun</xsl:when>

<xsl:when test="$month = 7">Jul</xsl:when>

<xsl:when test="$month = 8">Aug</xsl:when>

<xsl:when-test="$month = 9">Sen</xsl:when>

<xsl:when test="$month = 10">Oct</xsl:when>

<xsl:when test="$month = 11">Nov</xsl:when>

<xsl:when test="$month = 12">Dec</xsl:when>

 </xsl:choose>

 <xsl:text>-</xsl:text>

 <xsl:choose>

<xsl:when test="$year &lt;= 25">

<xsl:value-of select="format-number($year +2000, '0000')"/>

</xsl:when>

<xsl:otherwise>

<xsl:value-of select="format-number($year, '0000')"/>

</xsl:otherwise>

 </xsl:choose>

</xsl:template>

Рекурсия

Отсутствие в XSLT изменяемых переменных (оценим красоту этой тавтологии) как, впрочем, и многое другое, делает этот язык совершенно непохожим на многие классические языки программирования. В этом разделе мы опишем рекурсию [Кормен и др. 2000, Кнут 2000] — чрезвычайно простую, но в то же время исключительно мощную технику, которая в большинстве случаев компенсирует нехватку в XSLT переменных и других процедурных конструкций.

Не вдаваясь в строгие определения дискретной математики, можно сказать, что рекурсия это всего лишь описание объекта или вычисления в терминах самого себя. Пожалуй, самым простым примером рекурсии является факториал, функция, которая математически определяется как:

0!=1

n!=n×(n– 1)!

Программа на процедурном языке (например, таком, как Java), вычисляющая факториал совершенно тривиальна:

int factorial(int n) {

 if (n == 0) return 1;

 else return n * factorial(n-1);

}

Попробуем запрограммировать факториал на XSLT. Мы уже научились создавать собственные функции (вернее, конструкции, похожие на них) с помощью одних только именованных шаблонов, значит написать функцию, которая бы вызывала сама себя, будет не так уж и сложно.

Листинг 11.9. Именованный шаблон, вычисляющий факториал

<xsl:template name="factorial">

  • Читать дальше
  • 1
  • ...
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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