Книга: XSLT

format-number()

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>
   The Formatted Planets Table
  </TITLE>
 </HEAD>
 <BODY>
  <H1>
   The Formatted Planets Table
  </H1>
  <TABLE BORDER="2">
   <TR>
    <TD>Name</TD>
    <TD>Mass</TD>
    <TD>Radius</TD>
    <TD>Day</TD>
   </TR>
   <TR>
    <TD>Mercury</TD>
    <TD>0.055 (Earth = 1)</TD>
    <TD>1.516 miles</TD>
    <TD>58.65 days</TD>
   </TR>
   <TR>
    <TD>Venus</TD>
    <TD>0.815 (Earth = 1)</TD>
    <TD>3.716 miles</TD>
    <TD>116.75 days</TD>
   </TR>
   <TR>
    <TD>Earth</TD>
    <TD>1 (Earth = 1)</TD>
    <TD>2.107 miles</TD>
    <TD>1 days</TD>
   </TR>
  </TABLE>
 </BODY>
</HTML>

Этот результирующий документ показан на рис. 8.1. (MSXML3 и Saxon отбрасывают лидирующие нули, поэтому 0.055 выводится как .055 и т.д.)


Рис. 8.1. Форматирование чисел при помощи XSLT 

Следующие примеры демонстрируют способы применения форматирующих строк. Заметьте, что при помощи точки с запятой (;) можно отделять образцы для положительных и отрицательных чисел.

Число Форматирующая строка Результат
4567 #,### 4,567
4567.8 ####.# 4567.8
4567.8 #,##0.00 4,567.80
456.789 #,##0.00 456.79
4567890 #,##0.00 4,567,890.00
4567 ###0.0### 4567.0
.00045 ##0.0### 0.0005
.45 #00% 45%
-4.56 #.00;(#.00) (4.56)
-45 #,##0.00 -45

Оглавление книги


Генерация: 0.662. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз