В этой главе мы изучим доступные вам в 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) узел — но не контекстный узел. Текущий узел — это узел, используемый в данный момент в таких циклах, как
• 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