загрузка...
 
Сортування
Повернутись до змісту

Сортування

Ви вже ознайомилися з двома елементами, які можна використовувати для обробки елементів, що повторюються: 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.

  

     

Book Inventory

      

         select="INVENTORY/BOOK[BINDING='trade paperback']"

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

         Author:

        

         Title:

        

         Binding type:

        

         Number of pages:

        

         Price:

        

     

  

Розглянемо також приклад еxample_09.xsl:

  

     

Book Inventory

     

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

  

  

      Author:

     

      Title:

     

      Binding type:

     

      Number of pages:

     

      Price:

     

   

Обидві таблиці стилів розроблено для пов'язування з XML-документом. У них використаний такий фільтр який приписує браузеру відображувати тільки книги, що мають прошиту паперову палітурку (trade paperback):

[BINDING='trade paperback'].

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

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

Таблиця стилів використовує елемент for-each для відображення багатьох елементів BOOK. У приведеній нижче таблиці стилів для елемента for-each встановлені і фільтр, і атрибут order-by:

   select="INVENTORY/BOOK[BINDING='trade paperback']"

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

.

Таблиця стилів використовує для відображення багатьох елементів 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.)



загрузка...