XSLT
Шрифт:
В этой главе мы познакомимся с работой всех вышеназванных функций, а начнем с функций, встроенных в XSLT. Не обязательно читать всю главу подряд — скорее ею лучше пользоваться как справочным руководством: здесь перечислены все функции в удобном для просмотра виде.
Функции XSLT
В следующем списке перечислены встроенные в XSLT функции:
•
current
. Возвращает текущий (current) узел — но не контекстный узел. Текущий узел — это узел, используемый в данный момент в таких циклах, как <xsl:for-each>
.
•
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
применяется следующим образом:
Поделиться:
Популярные книги
Наномашины, демоненок! Том 3
3. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Герой
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Алые перья стрел
Детские:
детские приключения
8.58
рейтинг книги
Осколки маски
7. Унесенный ветром
Фантастика:
боевая фантастика
альтернативная история
6.71
рейтинг книги
Идеальный мир для Лекаря 26
26. Лекарь
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Лекарь Империи 4
4. Лекарь Империи
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Хозяин Стужи 5
5. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
6.60
рейтинг книги
Свет горизонта
1. Свет горизонта
Фантастика:
фэнтези
6.00
рейтинг книги
Агенты ВКС
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Вечный. Книга VII
7. Вечный
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга ХХХ
30. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Двойник Короля 5
5. Двойник Короля
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Хозяин Стужи 3
3. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
7.00
рейтинг книги
На границе империй. Том 4
4. Фортуна дама переменчивая
Фантастика:
космическая фантастика
6.00