Листинг 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 использует элемент 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()