Стивен Холзнер - XSLT
- Название:XSLT
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:Санкт-Петербург
- ISBN:5-94723-271-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Холзнер - XSLT краткое содержание
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Набор узлов (node set), как понятно из названия, представляет собой просто совокупность узлов (и может содержать только один узел). Выражение child::PLANET
возвращает набор узлов, состоящий из всех элементов . Выражение child::PLANET/child::NAME
возвращает список узлов, состоящий из всех элементов , дочерних по отношению к элементам . Для выбора узла или узлов из набора узлов воспользуйтесь следующими функциями для работы с наборами узлов в предикатах:
• last()
. Возвращает количество узлов в наборе узлов;
• position()
. Возвращает позицию контекстного узла в контекстном наборе узлов (начиная с 1);
• count(node-set)
. Возвращает количество узлов в наборе. Если опустить node-set
, функция будет применена к контекстному узлу;
• id(string ID)
. Возвращает набор узлов, содержащий элемент с ID, удовлетворяющим переданной функции строке, или пустой набор узлов, если такой элемент отсутствует. Можно перечислить несколько идентификаторов, разделенных символами-разделителями, — тогда функция вернет набор узлов, состоящий из элементов с этими идентификаторами;
• local-name(node-set)
. Возвращает локальное имя первого узла в наборе узлов. Если опустить node-set
, функция будет применена к контекстному узлу;
• namespace-uri(node-set)
. Возвращает URI пространства имен первого узла в наборе узлов. Если опустить node-set
, функция будет применена к контекстному узлу;
• name(node-set)
. Возвращает полностью определенное имя первого узла в наборе узлов. Если опустить node-set
, функция будет применена к контекстному узлу.
В листинге 4.6 я перенумеровал элементы в выходном документе при помощи функции position()
.
xmlns:xsl="http://www.w3.org/1999/XSL/Transform>
The Planets
Предикаты: логические значения
В выражениях XPath можно также использовать логические (Boolean) значения. Для чисел ноль принимается за ложь (false), другие значения — за истину (true). Пустая строка, "", также считается ложью, все остальные строки — истиной.
Для вычисления логических результатов true/false можно применять следующие логические операции XPath:
• != означает «не равно»;
• < означает «меньше, чем» (в документах XML или XSL используйте <);
• <= означает «меньше или равно» (в документах XML или XSL используйте <=);
• = означает «равно» (программисты на С, С++, Java и JavaScript, обратите внимание: эта операция пишется как один знак =, а не два);
• > означает «больше, чем»;
• >= означает «больше или равно».
ИСПОЛЬЗОВАНИЕ СИМВОЛА <
Особенно обратите внимание на то, что непосредственно в документах XML или XSL нельзя использовать символ <, необходимо использовать ссылку на сущность <.
Для связи логических выражений логическими операциями And и Or используются ключевые слова and и or; слово not инвертирует логический смысл выражения — с истины на ложь или со лжи на истину.
В листинге 4.7 я определяю элемент Земли и помещаю в таблицу строки "
Earth
", " needs
", " no
" и " introduction
" вместо числовых данных Земли. Я определяю, которая из планет есть Земля, при помощи предиката "[NAME='Earth']"
, проверяющего значение элемента , которое, в свою очередь, представляет собой заключенный в элементе текст. Я также предоставил шаблон для других планет, удовлетворяющих предикату " [NAME!='Earth']
''.
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
Name | Mass | Radius | Day |
Earth
needs
no
introduction.
Вот результат:
The Planets Table
<���Н1>
The Planets Table
</Н1>
.
.
.
Name | Mass | Radius | Day |
Earth | needs | no | introduction. |
Результат можно увидеть на рис. 4.1.

Рис. 4.1.Применение предикатов XPath
В следующем примере используется логическая операция >. Это правило применяется ко всем элементам после позиции 5:
Имеется также функция true
, всегда возвращающая значение true, и функция false
, всегда возвращающая значение false. Функция not
инвертирует логический смысл выражения, как в следующем случае, где я выбираю все элементы , кроме последнего:
Наконец, функция lang
возвращает истину или ложь в зависимости от того, является ли язык контекстного узла (определяемый атрибутами xml:lang
) таким же, как язык, который передан в эту функцию.
Предикаты: числа
В XPath числа хранятся в формате числа с плавающей точкой двойной точности. (Технически все числа XPath хранятся в 64-разрядном формате IEEE числа с плавающей точкой двойной точности, floating-point double.) Все числа хранятся как числа с двойной точностью — даже целые числа, как 5 в рассматриваемом примере:
Над числами можно производить ряд операций:
• +
сложение;
• -
вычитание;
• *
умножение;
• div
деление (символ /, соответствующий делению в других языках, в XML, XSL и XPath уже занят);
• mod
возвращает значение деления по модулю двух чисел (остаток после деления первого числа на второе).
Например, элемент вставит в выходной документ строку " 600
". В следующем примере выбираются все планеты, у которых отношение дня (измеренного в днях Земли) к массе (где масса Земли принята за 1) больше 100:
XPath также поддерживает следующие функции работы с числами:
• ceiling()
. Возвращает наименьшее целое, большее, чем переданное функции число;
• floor()
. Возвращает наибольшее целое, меньшее, чем переданное функции число;
• round()
. Округляет переданное число до ближайшего целого;
• sum()
. Возвращает сумму переданных функции чисел.
Например, среднюю массу планет в planets.xml
можно найти так, как в листинге 4.8:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The average planetary mass is:
Строки
В XPath строки формируются из символов Unicode, как можно было предположить. Ряд функций специально предназначен для работы со строками:
• string(object object1)
. Преобразует объект в строку;
• starts-with(string string1, string string2)
. Возвращает истину, если первая строка начинается (starts with) со второй строки;
• contains(string string1, string string2)
. Возвращает истину, если первая строка содержит (contains) вторую строку;
Интервал:
Закладка: