XSLT
Шрифт:
В этой главе мы познакомимся с работой всех вышеназванных функций, а начнем с функций, встроенных в XSLT. Не обязательно читать всю главу подряд — скорее ею лучше пользоваться как справочным руководством: здесь перечислены все функции в удобном для просмотра виде.
Функции XSLT
В следующем списке перечислены встроенные в XSLT функции:
•
current
. Возвращает текущий (current) узел — но не контекстный узел. Текущий узел — это узел, используемый в данный момент в таких циклах, как <xsl:for-each>
. Функцию 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) — узел. Контекстный узел шаблона — это узел в выбранном наборе узлов, к которому применяется шаблон. Текущий узел, с другой стороны, это используемый в данный момент узел в таких циклах, как <xsl:for-each>
. Функция возвращает текущий узел как набор узлов с одним узлом: node-set current
Обратите внимание:
current
нельзя применять в образцах, поскольку образцы должны быть независимы от пути обработки, а способы реализации таких структур, как циклы, в процессорах XSLT могут различаться. Следующий пример, в котором я выбираю элементы
<PLANET>
при помощи шаблона (листинг 8.1), демонстрирует работу функции current
. Внутрь шаблона я поместил элемент <xsl:for-each>
, и шаблон применяется только в том случае, если выбранный шаблоном контекстный узел в то же время является и текущим узлом в очередной итерации в элементе <xsl:for-each>
. Листинг 8.1. Применение функции current
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/PLANETS">
<HTML>
.
.
.
<TABLE BORDER=2>
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="PLANET">
<xsl:for-each select="/PLANETS/*[.=current]">
<TR>
<TD><xsl:value-of select="NAME"/></TD>
<TD><xsl:apply-templates select="MASS"/></TD>
<TD><xsl:apply-templates select="RADIUS"/></TD>
<TD><xsl:apply-templates select="DAY"/></TD>
</TR>
</xsl:for-each>
</xsl:template>
<xsl:template match="MASS">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
<xsl:template match="DAY">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
</xsl:stylesheet>
Результат применения этой таблицы стилей будет точно таким же, как если бы элемента
<xsl:for-each>
вообще не было, потому что тело элемента <xsl:for-each>
применяется только тогда, когда контекстный узел совпадает с текущим узлом. document
Функция
document
особенно полезна, потому что с ее помощью можно читать несколько документов и обрабатывать их содержимое. Функция document
применяется следующим образом:
Поделиться:
Популярные книги
Адвокат империи
1. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
фэнтези
5.75
рейтинг книги
Найденыш
2. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Сердце Дракона. Том 11
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Сержант. Назад в СССР. Книга 4
4. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный Маг Императора 23
23. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Шайтан Иван
1. Шайтан Иван
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Личный аптекарь императора. Том 2
2. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Том 12. Из 'Автобиографии'. Из записных книжек 1865-1905. Избранные письма
Проза:
классическая проза
5.00
рейтинг книги
Эфемер
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Газлайтер. Том 23
23. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.25
рейтинг книги
Неведомые поля (сборник)
Шедевры фантастики
Фантастика:
фэнтези
6.60
рейтинг книги
Убивать чтобы жить 4
4. УЧЖ
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Вернуть невесту. Ловушка для попаданки
1. Вернуть невесту
Любовные романы:
любовно-фантастические романы
8.49
рейтинг книги
Эволюционер из трущоб. Том 4
4. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00