Стивен Холзнер - XSLT
- Название:XSLT
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:Санкт-Петербург
- ISBN:5-94723-271-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Холзнер - XSLT краткое содержание
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
element-available()
Функция element-available()
используются для определения доступности определенного элемента расширения. Ее применяют следующим образом:
boolean element-available(element-name)
Функция принимает имя искомого элемента и, если элемент доступен, возвращает истину, если недоступен — ложь.
Мы уже встречались с этой функцией в главе 5. В примере element-available
той главы я проверял наличие элемента таким образом:
Sorry, can't do math today.
format-number()
Как можно догадаться по имени, функция 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 |
function-available()
При помощи функции XSLT 1.0
function-available
можно проверить наличие функции расширения:
boolean function-available(function-name)
Функция принимает в качестве параметра имя искомой функции и, если функция доступна, возвращает истину, если нет — ложь.
Следующий пример мы уже рассматривали в главе 5. В этом случае я хочу выполнить ряд математических операций при помощи функции расширения starpowder:calculate
, и если она отсутствует, вывести в результирующий документ текст «Sorry, can't do math today.» (Извините, сегодня математические вычисления не работают.). Можно, конечно, также прекратить обработку и вывести сообщение об ошибке при помощи элемента :
Sorry, can't do math today.
generate-id()
Функция generate-id
дает указание процессору XSLT присвоить узлу идентификатор (который возвращается как строка). Функция применяется следующим образом:
string generate-id(node)
Функции следует передать набор узлов, содержащий только узел, которому нужен идентификатор (все узлы после первого игнорируются); функция возвращает уникальный идентификатор для этого узла. Если передать функции снова этот же узел, она вернет тот же идентификатор. Заметьте, что идентификаторы различаются в зависимости от процессора XSLT.
Следующий пример взят из главы 6, но сейчас я собираюсь добавить в planets.html
оглавление, составленное из гиперссылок. Для создания оглавления я прохожу в цикле по всем планетам при помощи элемента . На каждом шаге цикла для текущей планеты я создаю гиперссылку и создаю атрибут HREF
со значением, равным уникальному идентификатору, при помощи шаблона значений атрибута:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
.
.
.
Этот код добавляет каждой планете идентификатор и создает нужные гиперссылки. Я могу создать закладки гиперссылки в HTML-таблице данных планет, установив по очереди атрибут закладки в идентификатор для каждого элемента так, чтобы он стал гиперссылкой-назначением:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
.
.
.
Вот и все; сейчас я создал гиперссылки с атрибутом HREF
, значение которого равно идентификатору элемента ; при помощи же этого идентификатора я сделал каждый элемент назначением гиперссылки.
Когда пользователь щелкает на гиперссылку в оглавлении, браузер прокручивает данные до соответствующей записи планеты в HTML-таблице. Вот как выглядит результирующий документ при использовании процессора Xalan:
The Planets Table
The Planets Table
Mercury
Venus
Earth
|
Name | Mass | Radius | Day |
Mercury | .0553 (Earth = 1) | 1516 miles | 58.65 days |
Venus | .815 (Earth = 1) | 3716 miles | 116.75 days |
Earth | 1 (Earth = 1) | 2107 miles | 1 days |
key()
Интервал:
Закладка: