» Главная
eXcode.ru » Статьи » Web » XSLT
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 22







Шаблонизация на XSLT. Приемы и примеры (Часть 3)




Автор: Александр Календарев, 19 марта 2005

Ближе к практике. Сортировка.

Одна из часто применяемых практических задач – это вывод отсортированной таблицы, причем критерий сортировки определен данными, т.е. при разработке шаблона мы заранее знаем только перечень критериев, по которым будет производиться сортировка. Для примера возьмем прайс-лист, который можно отсортировать по:

* цене
* наименованию товара
* наименованию группы товаров

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

Значение атрибута sort корневого элемента root определяет, какой тип сортировки использовать. В данном примере используется сортировка по категориям товаров (type).

Шаблон, обрабатывающий тег <table> и [строящий] таблицу, будет выглядеть следующим образом:


<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="root/table" />
</body>
</html>
</xsl:template >

<xsl:template match="table">
<xsl:variable name="sort" select="//root/@sort"/>
<table>
<xsl:for-each select="item">
<xsl:sort select="@name[$sort=′name′]"/>
<xsl:sort select="@price[$sort=′price′]"/>
<xsl:sort select="@type[$sort=′type′]"/>
<tr>
<td><xsl:value-of select="@name"/></td>
<td><xsl:value-of select="@type"/></td>
<td><xsl:value-of select="@price"/></td>
</tr>
</xsl:for-each >
</table>
</xsl:template >


Для реализации данного шаблона использован XSLT-элемент <xsl:variable>, который определяет XSLT переменную $sort. Данная переменная содержит значение атрибута sort корневого элемента root.

Для определения критерия сортировки использовались предикаты выборки. При вычислении предиката его результат приводится к булевому типу. Синтаксически предикат заключен в квадратные скобки, т.е. конструкция типа <xsl:sort select="@type[$sort=′type′]"/> показывает, что сортировка будет осуществляться для всех узлов по ключу, соответствующему атрибуту @type, при условии, что значение переменной $sort будет равно стоковому выражению [type]. Соответственно, по каждому критерию, по которому будет осуществлена сортировка, необходима своя команда <xsl:sort>.

Заключение

Конечно, количество всяких методов и приемов при разработке XSLT шаблонов множество и [нельзя объять необъятное]. В настоящее время даже появились разные стили написания шаблонов. Я попытался охватить лишь первые этапы [Путешествия в страну Шаблонизации].

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

Уже после написания данной статьи автор узнал о существовании инструментария XSLT-разработчика, включающее средства XSLT-отладки. Это такие программные продукты, как: xselerate, Stylus Studio, Altova XML StyleVision. Данные программные продукты являются платными.

Автор будет благодарен за любую критику данного материала, а также будет рад услышать ваши пожелания и узнать, с какими же вы сталкивались трудностями при разработке XSLT–шаблонов. Все замечания будут учтены при подготовке следующей статьи из цикла: [Шаблонизация на XSLT].
К началу статьи





Добавил: LedWormДата публикации: 2005-07-18 22:04:16
Рейтинг статьи:3.00 [Голосов 5]Кол-во просмотров: 6701

Комментарии читателей

Всего комментариев: 0
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Каким ICQ-клиентом вы пользуетесь?
Стандартным ICQ - клиентом.
11% (23)
Miranda 'ой
13% (29)
крысой - &RQ
5% (10)
Своим собственным :)
4% (8)
Не пользуюсь, так как сижу на модеме :(
1% (3)
Не пользуюсь, мне и так хорошо ...
6% (13)
Qip'ом
56% (121)
Другим
4% (8)

Проголосовало: 215
Отряд милиции особого назначения разогнал толпу бунтующих программистов.... до 1ГГц.
Рейтинг: 5.5/10 (2)
Посмотреть все анекдоты

 
eXcode.ru » Статьи » Web » XSLT