П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 182791 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 82311 раз(а).

Учебник HTML.
Просмотров 77193 раз(а).

Руководство по PHP5.
Просмотров 48099 раз(а).

Хостинг через призму DNS.
Просмотров 55621 раз(а).

Подборка текстов стандартных документов.
Просмотров 47470 раз(а).

Учебник PHP - Самоучитель
Просмотров 53934 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 54867 раз(а).

Внешние атаки...
Просмотров 44403 раз(а).

Учебник PHP.
Просмотров 39590 раз(а).

SSI в примерах.
Просмотров 29467 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Сортировка

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

<xsl:for-each select="tutorial/enimals/dogs/dog">

атрибут order-by

<xsl:for-each select="tutorial/enimals/dogs/dog" order-by="dogName">

Наша таблица примет вид (ex03-3.xml, ex03-3.xsl).

Кличка Вес Цвет
Бобик 2 кг бело-серый
Трезор 25 кг черный
Тузик 10 кг белый с черными пятнами
Шарик 18 кг рыжий с черными подпалинами

Более интересные результаты мы получим, если попытаемся отсортировать таблицу по столбцу "Вес". Вначале попробуем сделать по аналогии с предыдущим примером - атрибут order-by="dogName" заменим на order-by="dogWeight". Результат приведен ниже  (ex03-4.xml, ex03-4.xsl).

Кличка Вес Цвет
Тузик 10 кг белый с черными пятнами
Шарик 18 кг рыжий с черными подпалинами
Бобик 2 кг бело-серый
Трезор 25 кг черный

Таблица действительно отсортирована по столбцу "вес", но это не числовая, а строковая сортировка! Для того, чтобы браузер воспринял значения как числа, ему необходимо об этом сказать, - вместо order-by="dogWeight" необходимо написать order-by="number(dogWeight)". Теперь мы получили правильный результат (ex03-5.xml, ex03-5.xsl).

Кличка Вес Цвет
Бобик 2 кг бело-серый
Тузик 10 кг белый с черными пятнами
Шарик 18 кг рыжий с черными подпалинами
Трезор 25 кг черный

Приведем теперь пример сортировки по нескольким столбцам. Различные элементы в атрибуте order-by должны разделяться символом ";" -   order-by="number(dogWeight); dogName" (ex03-6.xml, ex03-6.xsl). Таблица приведена ниже.

Кличка Вес Цвет
Трезор 10 кг черный
Тузик 10 кг белый с черными пятнами
Бобик 18 кг бело-серый
Шарик 18 кг рыжий с черными подпалинами

Следующий пример работает только под управлением XML-парсера версии 3. В нем строки сортируются по одному столбцу - по кличке собаки. Этот пример уже приводился выше, однако теперь мы используем новый синтаксис (ex03-7.xml, ex03-7.xsl).

Отметим разницу.

При использовании нового синтаксиса используется ссылка на другое пространство имен

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

Кроме того, мы убрали атрибут order-by в элементе xsl:for-each и добавили другой элемент

<xsl:sort order="ascending" select="dogName"/>

Если элемент xsl:sort присутствует в элементе xsl:for-each, то он всегда должен стоять сразу после элемента xsl:for-each. Синтаксис элемента xsl:sort достаточно очевиден. В нем используются два атрибута: атрибут order - способ сортировки (по возрастанию или по убыванию) и атрибут select - имя поля, по которому производится сортировка. Если нам нужно отсортировать по первому элементу, как в данном примере, то вместо "dogName" можно было поставить точку - ".", для других элементов нужно указывать его имя, например "dogColor", если нам нужно отсортировать записи по цвету собаки. На самом деле атрибутов может быть пять - select, lang, data-type, order и case-order, но мы не будем здесь рассматривать все эти атрибуты, поскольку здесь мы не преследуем цель дать полное описание всех элементов, используемых в XSL, и их атрибутов.

Таблица результатов приведена ниже.

Кличка Вес Цвет
Бобик 2 кг бело-серый
Трезор 25 кг черный
Тузик 10 кг белый с черными пятнами
Шарик 18 кг рыжий с черными подпалинами

С использованием нового синтаксиса легко сменить сортировку по возрастанию на сортировку по убыванию (ex03-8.xml, ex03-8.xsl). Этот пример работает только под управлением XML-парсера версии 3.

Разница заключается в одной строке

<xsl:sort order="descending" select="dogName"/>

Мы изменили значение атрибут order - значение ascending заменено на descending.

Таблица результатов приведена ниже.

Кличка Вес Цвет
Шарик 18 кг рыжий с черными подпалинами
Тузик 10 кг белый с черными пятнами
Трезор 25 кг черный
Бобик 2 кг бело-серый

Покажем теперь сортировку по нескольким полям (ex03-9.xml, ex03-9.xsl). Этот пример работает только под управлением XML-парсера версии 3.

В этом примере у нас фигурируют две строки с элементом xsl:sort.

<xsl:sort order="ascending" select="number(dogWeight)" data-type="number"/>
<xsl:sort order="ascending" select="dogName"/>

Строки вначале сортируются по весу собаки, а затем по их кличкам в алфавитном порядке. Обратите внимание - для того, чтобы сортировка выполнялась в числовой последовательности, в элемент xsl:sort мы добавили атрибут data-type. Таблица результатов приведена ниже.

Кличка Вес Цвет
Волчонок 3 кг темно-серый
Трезор 10 кг черный
Тузик 10 кг белый с черными пятнами
Бобик 18 кг бело-серый
Шарик 18 кг рыжий с черными подпалинами

Заменив значение атрибута order by на descending, мы легко сгруппируем записи о собаках с одинаковым весом так, что клички будут идти в обратном алфавитном порядке. Соответствующий пример вы легко построите сами.

Кличка Вес Цвет
Волчонок 3 кг темно-серый
Тузик 10 кг белый с черными пятнами
Трезор 10 кг черный
Шарик 18 кг рыжий с черными подпалинами
Бобик 18 кг бело-серый

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



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: