Функция принимает имя искомого элемента и, если элемент доступен, возвращает истину, если недоступен — ложь.

Мы уже встречались с этой функцией в главе 5. В примере element-available той главы я проверял наличие элемента <starpowder:calculate> таким образом:

<xsl:choose xmlns:starpowder='http://www.starpowder.com'>

 <xsl:when test='element-available ('starpowder:calculate')'>

  <starpowder:calculate xsl:extension-element- prefixes='starpowder'/>

 </xsl:when>

 <xsl:otherwise>

  <xsl:text>Sorry, can't do math today.</xsl:text>

 </xsl:otherwise>

</xsl:choose>

format-number()

Как можно догадаться по имени, функция format-number() служит для форматирования чисел с преобразованием их в строки. Она применяется так:

string format-number(number, format, name?)

Функция возвращает форматируемое число в виде строки. Функции передаются число number, которое нужно отформатировать, строка форматирования format и необязательный параметр-строка name. Строка name — это имя QName, задающее формат так, как он создается элементом <xsl:decimal-format> (который будет рассмотрен в конце этой главы).

Форматирующая строка format должна соответствовать соглашениям класса Java DecimalFormat.

КЛАСС JAVA DECIMALFORMAT

На момент написания книги документация для класса Java DecimalFormat находится в Интернете по адресу: http://java.sun.com/products/jdk/1.1/docs/api/java.text.DecimalFormat.html.

Форматирующая строка (format string) состоит из следующих частей:

• format-string:= subpattern (;subpattern)?

• subpattern:= prefix? integer (.fraction)?suffix?

• prefix:= [#x0..#xFFFD] - specialCharacters

• suffix:= [#x0..#xFFFD] - specialCharacters

• integer:= '#'* '0'* '0'

• fraction:= '0'* '#'*

Далее показаны специальные символы (specialCharacters), которые можно использовать в подчиненных образцах, subpattern (эти символы можно изменить при помощи элемента <xsl:decimal-format>, который будет рассмотрен в конце этой главы):

• 0 — на этом месте всегда должна стоять цифра;

• # — цифра, если только это не избыточный лидирующий или завершающий ноль;

• . — разделитель десятичной части;

• , — разделитель групп разрядов;

• ; — разделяет форматы;

• - — знак минуса;

• % — умножить на 100 и показать как проценты;

•  — умножить на 1000 и показать в тысячных частях;

• Е — разделяет мантиссу и экспоненциальную часть;

• ¤ — символ валюты (#xA4);

• ' — заключает в кавычки специальные символы.

Следующий пример (листинг 8.5) демонстрирует работу функции. Я форматирую значения из planets.xml, отображаемые в таблице HTML.

Листинг 8.5. Форматирование чисел

<?xml version='1.0'?>

<xsl:stylesheet version='1.0'

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

 <xsl:template match='/PLANETS'>

  .

  .

  .

 </xsl:template>

 <xsl:template match='PLANET'>

  <TR>

   <TD><xsl:value-of select='NAME'/></TD>

   <TD><xsl:apply-templates select='MASS'/></TD>

   <TD><xsl:apply-templates select='RADIUS'/></TD>

   <TD><xsl:apply-templates select='DAY'/></TD>

  </TR>

 </xsl:template>

 <xsl:template match='MASS'>

  <xsl:value-of select='format-number(., '#.###')'/>

  <xsl:text> </xsl:text>

  <xsl:value-of select='@UNITS'/>

 </xsl:template>

 <xsl:template match='RADIUS'>

  <xsl:value-of select='format-number(., '#.###')'/>

  <xsl:text> </xsl:text>

  <xsl:value-of select='@UNITS'/>

 </xsl:template>

 <xsl:template match='DAY'>

  <xsl:value-of select='format-number(., '###.#')'/>

  <xsl:text> </xsl:text>

  <xsl:value-of select='@UNITS'/>

 </xsl:template>

</xsl:stylesheet>

Вот результат, в котором выведены отформатированные числа:

<HTML>

 <HEAD>

  <TITLE>

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату