Функция 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.» (Извините, сегодня математические вычисления не работают.). Можно, конечно, также прекратить обработку и вывести сообщение об ошибке при помощи элемента :
Читать дальше