Функция element-available()
используются для определения доступности определенного элемента расширения. Ее применяют следующим образом:
boolean element-available(element-name)
Функция принимает имя искомого элемента и, если элемент доступен, возвращает истину, если недоступен — ложь.
Мы уже встречались с этой функцией в главе 5. В примере element-available
той главы я проверял наличие элемента таким образом:
Sorry, can't do math today.
Как можно догадаться по имени, функция format-number()
служит для форматирования чисел с преобразованием их в строки. Она применяется так:
string format-number(number, format, name?)
Функция возвращает форматируемое число в виде строки. Функции передаются число number
, которое нужно отформатировать, строка форматирования format
и необязательный параметр-строка name
. Строка name — это имя QName
, задающее формат так, как он создается элементом (который будет рассмотрен в конце этой главы).
Форматирующая строка 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
(эти символы можно изменить при помощи элемента , который будет рассмотрен в конце этой главы):
• 0
— на этом месте всегда должна стоять цифра;
• #
— цифра, если только это не избыточный лидирующий или завершающий ноль;
• .
— разделитель десятичной части;
• ,
— разделитель групп разрядов;
• ;
— разделяет форматы;
• -
— знак минуса;
• %
— умножить на 100 и показать как проценты;
• ‰
— умножить на 1000 и показать в тысячных частях;
• Е
— разделяет мантиссу и экспоненциальную часть;
• ¤
— символ валюты (#xA4);
• '
— заключает в кавычки специальные символы.
Следующий пример (листинг 8.5) демонстрирует работу функции. Я форматирую значения из planets.xml
, отображаемые в таблице HTML.
Листинг 8.5. Форматирование чисел
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
|
|
|
|
Вот результат, в котором выведены отформатированные числа:
The Formatted Planets Table
The Formatted Planets Table
Name |
Mass |
Radius |
Day |
Mercury |
0.055 (Earth = 1) |
1.516 miles |
58.65 days |
Venus |
0.815 (Earth = 1) |
3.716 miles |
116.75 days |
Earth |
1 (Earth = 1) |
2.107 miles |
1 days |
Этот результирующий документ показан на рис. 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 |
При помощи функции XSLT 1.0 function-available
можно проверить наличие функции расширения:
boolean function-available(function-name)
Функция принимает в качестве параметра имя искомой функции и, если функция доступна, возвращает истину, если нет — ложь.
Следующий пример мы уже рассматривали в главе 5. В этом случае я хочу выполнить ряд математических операций при помощи функции расширения starpowder:calculate
, и если она отсутствует, вывести в результирующий документ текст «Sorry, can't do math today.» (Извините, сегодня математические вычисления не работают.). Можно, конечно, также прекратить обработку и вывести сообщение об ошибке при помощи элемента :
Читать дальше