Ви вже ознайомилися з двома елементами, які можна використовувати для обробки елементів, що повторюються: for-each і apply-templates. Можна використовувати атрибут order-by для цих елементів, щоб управляти порядком, в якому браузер обробляє елементи, тим самим здійснюючи сортування даних XML.
Ви можете призначати атрибуту order-by один або декілька зразків, розділяючи їх крапкою з комою. Браузер сортуватиме елементи з використанням зразків у тому порядку, в якому вони перелічені. Для зазначення напряму сортування (за зростанням або за спаданням) слід перед зразком поставити префікс + або – .
Наприклад, атрибут order-by, встановлений для наступного елемента for-each, наказує браузеру сортувати елементи BOOK за прізвищами авторів у порядку зростання, а також здійснювати сортування для однакових прізвищ за іменами також за зростанням:
order-by="+AUTHOR/LASTNAME; +AUTHOR/FIRSTNAME">
В іншому прикладі наступна установка order-by здійснює сортування елементів BOOK за назвами книг за спаданням:
.
Оператор шляху, який ви привласнюєте атрибуту order-by, діє на зразок, що призначений атрибуту select. Так, у даному прикладі установка order-by="-TITLE" вказує на елемент TITLE всередині елемента BOOK, вкладеного в елемент INVENTORY.
Приклад таблиці стилів, що здійснює фільтрацію і сортування
Наведемо два приклади XSL-таблиць стилів. Кожен із них здійснює фільтрацію і сортування елементів BOOK, що підлягають відображенню. Розглянемо приклад example_18.xsl.
Обидві таблиці стилів розроблено для пов'язування з XML-документом. У них використаний такий фільтр який приписує браузеру відображувати тільки книги, що мають прошиту паперову палітурку (trade paperback):
[BINDING='trade paperback'].
В обох прикладах використовується така установка order-by, яка задає сортування елементів BOOK за зростанням за прізвищами авторів, а потім за іменами авторів:
order-by="+AUTHOR/LASTNAME; +AUTHOR/FIRSTNAME".
Таблиця стилів використовує елемент for-each для відображення багатьох елементів BOOK. У приведеній нижче таблиці стилів для елемента for-each встановлені і фільтр, і атрибут order-by:
Таблиця стилів використовує для відображення багатьох елементів BOOK елемент apply-templates разом з окремими шаблонами, що відповідають елементам "BOOK". У цій таблиці стилів фільтр доданий до шаблону відповідного елементам BOOK:
.
Додавання фільтра до елемента apply-templates матиме той же ефект.
Атрибут order-by може бути доданий до елемента apply-templates таким чином:
order-by="+AUTHOR/LASTNAME; +AUTHOR/FIRSTNAME"/>
Атрибут order-by слід додати до елемента apply-templates, оскільки елемент template не розпізнає цей атрибут. (Ви можете використовувати атрибут order-by тільки для елемента, який указує браузеру здійснити перегляд серед множини елементів, – а саме, for-each і apply-templates.)