Стивен Холзнер - XSLT
- Название:XSLT
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:Санкт-Петербург
- ISBN:5-94723-271-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Холзнер - XSLT краткое содержание
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
• должен поддерживать средства поиска, основанные на уникальных ограничениях и ключах схемы.
Хотя мы подошли к концу главы, о XPath сказано еще не все. Тема будет продолжена в следующей главе, в которой мы более внимательно рассмотрим доступные в XPath функции и функции, уже встроенные в XSLT.
Глава 8
Работа с функциями XSLT и XPath
В этой главе мы изучим доступные вам в XSLT функции — как встроенные в XSLT, так и функции XPath. Вы уже встречались с этими функциями выборочно (например, с id
, generate-id
, position
, count
и т.д). В этой главе мы рассмотрим их все.
Некоторые функции входят в XSLT, некоторые пришли из XPath. И XSLT, и XPath обновляются до версии 2.0, и в конце главы я приведу список новых, готовящихся к выпуску функций. (Пока что никаких новых функций версии 2.0 еще не опубликовано.)
В XSLT встроены следующие функции:
• element-available()
;
• function-available()
;
• current()
;
• document()
;
• key()
;
• format-number()
;
• generate-id()
;
• system-property()
;
• unparsed-entity-uri()
.
Вы также можете пользоваться многими функциями XPath. Я сгруппирую их по типам данных XPath, с которыми они работают. Существует четыре типа данных: наборы узлов, строки, числа и логические значения. С наборами узлов работают следующие функции XPath:
• count()
;
• id()
;
• last()
;
• local-name()
;
• name()
;
• namespace-uri()
;
• position()
.
Следующие функции XPath работают со строками:
• concat()
;
• contains()
;
• normalize-space()
;
• starts-with()
;
• string()
;
• string-length()
;
• substring()
;
• substring-after()
;
• substring-before()
;
• translate()
.
Для работы с числами служат следующие функции XPath:
• ceiling()
;
• floor()
;
• number()
;
• round()
;
• sum()
.
И эти функции XPath работают с логическими значениями:
• boolean()
;
• false()
;
• lang()
;
• not()
;
• true()
.
В этой главе мы познакомимся с работой всех вышеназванных функций, а начнем с функций, встроенных в XSLT. Не обязательно читать всю главу подряд — скорее ею лучше пользоваться как справочным руководством: здесь перечислены все функции в удобном для просмотра виде.
Функции XSLT
В следующем списке перечислены встроенные в XSLT функции:
• current()
. Возвращает текущий (current) узел — но не контекстный узел. Текущий узел — это узел, используемый в данный момент в таких циклах, как . Функцию current нельзя применять в образцах;
• document()
. Позволяет считывать несколько документов;
• element-available()
. Показывает, доступен ли элемент расширения;
• format-number()
. Форматирует числа при выводе;
• function-available()
. Показывает, доступна ли функция расширения;
• generate-id()
. Указывает процессору XSLT присвоить идентификатор узлу и возвратить его. При повторном применении generate-id к тому же узлу функция возвращает присвоенный ранее идентификатор;
• key()
. Позволяет осуществлять поиск по ключу;
• system-property()
. Позволяет проверить три системных свойства: xsl:version
(версия XSLT, поддерживаемая процессором XSLT), xsl:vendor
(производитель процессора XSLT) и xsl:vendor-url
(URL производителя процессора XSLT);
• unparsed-entity-uri()
. Предоставляет доступ к неразобранным сущностям, объявленным в DTD или схеме, через URI.
В следующих разделах все эти функции рассматриваются подробно и с примерами.
current()
Функция current
возвращает текущий (current) — не контекстный (context) — узел. Контекстный узел шаблона — это узел в выбранном наборе узлов, к которому применяется шаблон. Текущий узел, с другой стороны, это используемый в данный момент узел в таких циклах, как . Функция возвращает текущий узел как набор узлов с одним узлом:
node-set current()
Обратите внимание: current
нельзя применять в образцах, поскольку образцы должны быть независимы от пути обработки, а способы реализации таких структур, как циклы, в процессорах XSLT могут различаться.
Следующий пример, в котором я выбираю элементы при помощи шаблона (листинг 8.1), демонстрирует работу функции current
. Внутрь шаблона я поместил элемент , и шаблон применяется только в том случае, если выбранный шаблоном контекстный узел в то же время является и текущим узлом в очередной итерации в элементе .
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
Name | Mass | Radius | Day |
Результат применения этой таблицы стилей будет точно таким же, как если бы элемента вообще не было, потому что тело элемента применяется только тогда, когда контекстный узел совпадает с текущим узлом.
document()
Функция document
особенно полезна, потому что с ее помощью можно читать несколько документов и обрабатывать их содержимое. Функция document
применяется следующим образом:
node-set document(uri, base-uri?)
Функция принимает параметр uri
, который может представлять собой URI читаемого документа или набор узлов, чьи строковые значения задают идентификаторы URI. Второй, необязательный параметр base-uri
представляет собой набор узлов, базовый URI которого используется для вычисления всех относительных URI, могущих находиться в параметре uri
.
В следующем примере (листинг 8.2) я обрабатываю в процессоре XSLT один документ, planets1.xml
, и также считываю и обрабатываю второй документ, planets2.xml
. Вот planets1.xml
.
Вот planets2.xml
— в элементе содержится одна планета (листинг 8.3).
Mercury
.0553
58.65
1516
.983
43.4
А вот таблица стилей planets.xml
, которую я применяю к planets1.xml
. Таблица стилей содержит шаблон, выбирающий элемент в planets1.xml
, и в этом шаблоне я считываю planets2.xml
при помощи и функции document
(листинг 8.4).
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
Name | Mass | Radius | Day |
.
.
.
Эта таблица стилей обрабатывает данные в planets1.xml
и также считывает и обрабатывает planets2.xml
; вот полный результат — как видите, данные для planets2.xml
добавились нужным образом:
The Planets Table
The Planets Table
Name | Mass | Radius | Day |
Mercury | .0553 (Earth = 1) | 1516 miles | 58.65 days |
Функция
document
удобна, поскольку позволяет считывать на этапе выполнения такие дополнительные документы, как справка о правах владения или отказе от них, фирменный бланк и т.п.
Интервал:
Закладка: