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

на главную

Жанры

Технология XSLT

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

Шрифт:

В одном атрибуте можно использовать несколько выражений — каждое из них должно быть заключено в фигурные скобки.

Пример

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

<images dir="/images">

 <image filename="rose.jpg"/>

 <image filename="orchide.gif"/>

 <image filename="primul.gif"/>

</images>

Файлы хранятся в каталоге, указанном в атрибуте

dir
элемента
images
, а
иконки имеют те же имена файлов, что и большие изображения, но с префиксом "
th_
". Для получения ссылок на изображения мы можем воспользоваться следующим преобразованием:

<xsl:template match="images/image">

 <а href="#">

<img src="{../@dir}/th_{@filename}"/>

 </a>

</xsl:template>

Результат будет получен в виде:

<а href="#"><img src="/images/th_rose.jpg"/></a>

<a href="#"><img src="/images/th_orchide.gif"/></a>

<a href="#"><img src="/images/th_primul.gif"/></a>

Для того чтобы использовать в значении атрибута левые и правые фигурные скобки в качестве простых символов, нужно удваивать их количество, то есть указывать "

{{
" вместо каждой левой и "
}}
" вместо каждой правой фигурной скобки соответственно.

Пример

Элемент, определенный как

<input name="login" type="text"

 value="{{{{{{Enter your login here}}}}}}"/>

будет преобразован в выходящем документе к виду

<input name="login" type="text" value="{{{Enter your login here}}}"/>

Фигурные скобки нельзя использовать рекурсивно для вычисления внутри выражений. К примеру, в качестве значения атрибута

name
, определенного как

<story name="{/h{1 + 2}/p}"/>

не будет использовано вычисленное значение выражения

/h3/p
. Вместо этого процессор выдаст ошибку.

Фигурные скобки могут быть спокойно использованы внутри выражения в литералах — в этом случае они не будут задавать значений атрибутов.

Пример

Элемент, определенный как

<page numbers="{concat ('{', ' 1,2,3', '}') }"/>

будет преобразован к виду

<page numbers="{1,2,3}"/>

Шаблоны значений могут быть использованы далеко не везде. К примеру, не могут содержать шаблонов следующие типы атрибутов.

□ Атрибуты, значениями которых являются выражения.

□ Атрибуты, значениями которых являются паттерны.

□ Атрибуты элементов верхнего уровня.

□ Атрибуты пространств имен (

xmlns
).

Шаблоны значений могут содержаться в любых атрибутах литеральных элементов, что уже несколько раз было продемонстрировано выше. Например, в литеральном элементе

<img src="{../@dir}/th_{@filename}"/>

атрибут

src
содержит ни что иное, как два шаблона значений.

Что же касается атрибутов элементов XSLT, то как очевидно из табл. 4.4, лишь малая их часть может содержать шаблоны значений.

Таблица 4.4. Атрибуты элементов XSLT, которые могут содержать шаблоны значений

Элемент Атрибуты Описание
xsl:element
name
Имя
создаваемого элемента
namespace
Пространство имен создаваемого элемента
xsl:attribute
name
Имя создаваемого атрибута
namespace
Пространство имен создаваемого атрибута
xsl:processing-instruction
name
Имя целевого приложения инструкции по обработке
xsl:number
format
Формат номера
lang
Языковой контекст номера
letter-value
Традиционная или алфавитная буквенная нумерация
grouping-separator
Символ-разделитель групп цифр номера
grouping-size
Размер группы цифр номера
xsl:sort
lang
Языковой контекст сортировки
data-type
Тип данных сортировки
order
Порядок сортировки
case-order
Старшинство прописных и строчных символов при сортировке

Таким образом, перечень параметров, которые могут изменяться динамически (иными словами — вычисляться непосредственно во время выполнения шаблона) не так велик. В частности, стандартными способами в XSLT невозможно выполнить следующее.

□ Вызвать именованный шаблон динамически: атрибут name элемента

xsl:call-template
должен быть задан заранее и не может содержать шаблон значения.

□ Динамически изменить режим применения шаблонов (атрибут

mode
элемента
xsl:apply-templates
).

□ Вычислить элементами

xsl:copy-of
и
xsl:value-of
выражение заранее неизвестного вида.

□ Давать переменным и параметрам имена, вычисляемые во время выполнения преобразования.

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

Глава 5

Шаблонные правила

Преобразование как набор правил

В предыдущих главах мы уже упомянули о том, что преобразование в XSLT состоит не из последовательности действий, а из набора шаблонных правил, каждое из которых обрабатывает свою часть XML-документа. Эта глава целиком посвящена вопросам создания и использования шаблонных правил, однако, прежде чем мы приступим к их рассмотрению, хотелось бы пояснить, почему же все-таки правила, а не действия.

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

Безымянный раб [Другая редакция]

Зыков Виталий Валерьевич
1. Дорога домой
Фантастика:
боевая фантастика
9.41
рейтинг книги
Безымянный раб [Другая редакция]

Измена. Свадьба дракона

Белова Екатерина
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Измена. Свадьба дракона

Не грози Дубровскому! Том VIII

Панарин Антон
8. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том VIII

Последняя Арена 7

Греков Сергей
7. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 7

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Все не так, как кажется

Юнина Наталья
Любовные романы:
современные любовные романы
7.70
рейтинг книги
Все не так, как кажется

Я же бать, или Как найти мать

Юнина Наталья
Любовные романы:
современные любовные романы
6.44
рейтинг книги
Я же бать, или Как найти мать

Боярышня Дуняша

Меллер Юлия Викторовна
1. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Дуняша

Аромат невинности

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
эро литература
9.23
рейтинг книги
Аромат невинности

Кодекс Крови. Книга IХ

Борзых М.
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ

Свет во мраке

Михайлов Дем Алексеевич
8. Изгой
Фантастика:
фэнтези
7.30
рейтинг книги
Свет во мраке

Приручитель женщин-монстров. Том 3

Дорничев Дмитрий
3. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 3

Жестокая свадьба

Тоцка Тала
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Жестокая свадьба

Безродный

Коган Мстислав Константинович
1. Игра не для слабых
Фантастика:
боевая фантастика
альтернативная история
6.67
рейтинг книги
Безродный