Стивен Холзнер - 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()
Интервал:
Закладка: