=> Главная База Знаний Xslt Format-number()


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>

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

format-number()

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