Функция принимает имя искомого элемента и, если элемент доступен, возвращает истину, если недоступен — ложь.
Мы уже встречались с этой функцией в главе 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>