Чтение онлайн

на главную - закладки

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:
Листинг 8.68. Преобразование, использующее функцию unparsed-entity-uri

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output

method="html"

indent="yes"/>

 <xsl:template match="menu">

<table>

<xsl:apply-templates select="menuitem"/>

</table>

 </xsl:template>

 <xsl:template match="menuitem">

<tr>

<td>

<A alt="{@title}" href="#">

<img src="{unparsed-entity-uri(@image)}"/>

</A>

</td>

</tr>

 </xsl:template>

</xsl:stylesheet>

Результат

преобразования приведен на следующем листинге.

Листинг 8.69. Выходящий документ

<table>

 <tr>

<td>

<A alt="News" href="#">

<img src="file:/C:/XML/news.gif"/>

</A>

</td>

 </tr>

 <tr>

<td>

<A alt="Products" href="#">

<img src="file:/C:/XML/prod.jpg"/>

</A>

</td>

 </tr>

 <tr>

<td>

<A alt="Support" href="#">

<img src="file:/С:/XML/support.gif"/>

</A>

</td>

 </tr>

</table>

Остается только добавить, что

unparsed-entity-uri
— это единственная функция, которая позволяет работать с неразбираемыми сущностями. Никаких средств для обработки нотаций и вспомогательных приложений, которые им соответствуют, в XSLT нет. Сказывается тот факт, что неразбираемые сущности и нотации очень редко используются в документах, поэтому их поддержка в XSLT минимальна.

Функция generate-id

Синтаксическая конструкция этой функции:

string generate-id(node-set?)

Функция

generate-id
возвращает уникальный строковый идентификатор первого в порядке
просмотра документа узла, передаваемого ей в виде аргумента. Если аргумент опущен, функция возвращает уникальный идентификатор контекстного узла. Если аргументом является пустое множество, функция должна возвращать пустую строку.

Функция

generate-id
обладает следующими свойствами.

□ Функция

generate-id
возвращает для двух узлов один и тот же идентификатор тогда и только тогда, когда эти два узла совпадают. Это означает, что во время выполнения одного преобразования функция
generate-id
будет возвращать один идентификатор для одного и того же узла, а для разных узлов
generate-id
обязательно возвратит разные идентификаторы.

□ Возвращаемый идентификатор состоит только из цифр и букв ASCII и начинается буквой, то есть синтаксически является корректным XML-именем и может использоваться как имя элемента, атрибута, как значение ID-атрибута или в любом другом месте, где могут использоваться имена XML.

Кроме этого спецификация оговаривает следующие важные положения, которые мы приведем ниже.

□ Процессор не обязан генерировать один и тот же идентификатор при разных выполнениях преобразования одного и того же документа. Иными словами, если в понедельник процессор

X
при выполнении преобразования
Y
сгенерирует для узла
Z
документа
D
идентификатор
I
, то во вторник тот же процессор
X
при выполнении того же преобразования
Y
с тем же документом
D
может сгенерировать для того же самого узла
Z
совершенно другой, отличный от
I
идентификатор.

□ Форма возвращаемого идентификатора может быть произвольной, но при этом она должна удовлетворять описанному выше синтаксису. Это означает, что каждый процессор может по-своему генерировать идентификатор. Спецификация не определяет никакого стандартного метода реализации функции

generate-id
.

□ Генерируемый идентификатор может совпадать, а может и не совпадать со значениями уникальных атрибутов, то есть атрибутов, тип данных которых объявлен в блоке DTD как

ID
.

Помимо очевидного применения, например, для явного задания уникального идентификатора в выходящем документе, функция

generate-id
совершено неожиданным образом облегчает задачи группировки. Подробнее об этом мы расскажем в главе 11.

Пример

Предположим, что в наших XML-документах изменилась логическая схема: теперь каждый элемент

item
должен обладать уникальным атрибутом
id
.

Выполнить задачу конвертации может простое преобразование.

Поделиться:
Популярные книги

Огненный князь 4

Машуков Тимур
4. Багряный восход
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 4

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Опер. Девочка на спор

Бигси Анна
5. Опасная работа
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Опер. Девочка на спор

Командор космического флота

Борчанинов Геннадий
3. Звезды на погонах
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Командор космического флота

Личный аптекарь императора. Том 5

Карелин Сергей Витальевич
5. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
7.50
рейтинг книги
Личный аптекарь императора. Том 5

Агенты ВКС

Вайс Александр
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Агенты ВКС

Бастард Императора. Том 10

Орлов Андрей Юрьевич
10. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 10

Возвышение Меркурия. Книга 17

Кронос Александр
17. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 17

Тот самый сантехник. Трилогия

Мазур Степан Александрович
Тот самый сантехник
Приключения:
прочие приключения
5.00
рейтинг книги
Тот самый сантехник. Трилогия

Князь Андер Арес 3

Грехов Тимофей
3. Андер Арес
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Князь Андер Арес 3

Адвокат Империи 4

Карелин Сергей Витальевич
4. Адвокат империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Адвокат Империи 4

Роза ветров

Кас Маркус
6. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Роза ветров

Первый среди равных

Бор Жорж
1. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных

Царь царей

Билик Дмитрий Александрович
9. Бедовый
Фантастика:
фэнтези
мистика
5.00
рейтинг книги
Царь царей