Основы XML




Пример таблицы стилей, осуществляющей фильтрацию и сортировку - часть 2


Листинг 10.7. Xsldemo05.xsl (html, txt)

Обе таблицы стилей разработаны для связывания с XML-документом из Листинга 10.4 (XslDemo.xml). В них использован следующий фильтр, предписывающий браузеру отображать только книги, имеющие прошитый бумажный переплет (trade paperback):

[BINDING='trade paperback']

В обоих примерах используется следующая установка order-by, задающая сортировку элементов BOOK по возрастанию по фамилиям авторов, а затем по именам авторов:

order-by="+AUTHOR/LASTNAME; +AUTHOR/FIRSTNAME"

На рисунке 10.6 показано как выглядит первая часть выводимой информации, которая является одинаковой для обеих таблиц стилей.


Рис. 10.6. 

Таблица стилей из Листинга 10.6 использует элемент for-each для отображения множества элементов BOOK. В приведенной ниже таблице стилей для элемента for-each установлены и фильтр, и атрибут order-by:

<xsl:for-each select="INVENTORY/BOOK[BINDING='trade paperback']" order-by="+AUTHOR/LASTNAME; +AUTHOR/FIRSTNAME"> <!-- отображение текущего элемента BOOK --> </xsl:for-each>

Таблица стилей из Листинга 10.7 использует для отображения множества элементов BOOK элемент apply-templates вместе с отдельными шаблонами, отвечающими элементам "BOOK". В этой таблице стилей фильтр добавлен к шаблону, соответствующему элементам BOOK:

<xsl:template match="BOOK[BINDING='trade paperback']">

Добавление фильтра к элементу apply-templates будет иметь тот же эффект.

Атрибут order-by может быть добавлен к элементу apply-templates следующим образом:

<xsl:apply-templates select="INVENTORY/BOOK" order-by="+AUTHOR/LASTNAME; +AUTHOR/FIRSTNAME"/>

Атрибут order-by следует добавить к элементу apply-templates, поскольку элемент template не распознает этот атрибут. (Вы можете использовать атрибут order-by только для элемента, который указывает браузеру осуществить просмотр среди множества элементов – а именно, for-each и apply-templates.)

on_load_lecture()




Содержание  Назад  Вперед