загрузка...
 
Відображення змінного числа елементів
Повернутись до змісту

Відображення змінного числа елементів

У прикладі, що розглянуто вище, XML-документ містив тільки один елемент BOOK. У випадку, якщо документ містить декілька елементів BOOK, розглянута методика здатна відображувати тільки один з елементів. Візьмемо для прикладу ще один XML-документ:

  

  

  

      Mark

      Twain

  

   mass market paperback

   298

   $5.49

  

  

  

  

      Mark

      Twain

  

   mass market paperback

   205

   $4.75

  

  

  

  

      Henry

      James

  

   mass market paperback

   305

   $5.95

  

.

Припустимо, що таблиця стилів, яка використана для відображення цього документа, містить такий шаблон:

  

     

Book Description

      Author:

     

      Title:

     

      Price:

     

      Binding type:

     

      Number of pages:

     

  

.

Зверніть увагу, що зразок привласнених кожному атрибуту значень select, починається з вказівки елемента Документ, у даному випадку INVENTORY (наприклад, "INVENTORY/BOOK/AUTHOR").

Проте кожен зразок відповідає трьом різним елементам. Наприклад, "INVENTORY/BOOK/AUTHOR" відповідає елементу AUTHOR для всіх трьох елементів BOOK. У подібній ситуації браузер використовує тільки перший із відповідних елементів. Таким чином, таблиця стилів відображуватиме вміст тільки першого елемента BOOK, як показано на рисунку 13.

 

Рисунок 13 – Приклад відображення змінного числа елементів

Щоб відображувати всі елементи, що відповідають зразку, слід використовувати XSL-елемент for-each, який викликає повторне відображення для кожного з елементів, що містяться в XML-файлі. XSL-таблиця стилів, представлена в example_16.xsl, демонструє дану методику. Ця таблиця стилів пов'язана з XML-документом.

  

      

Book Inventory

     

         Title:

        

         Author:

        

         Binding type:

        

         Number of pages:

        

         Price:

        

     

  

.

Шаблон у таблиці стилів із даного прикладу містить такий елемент for-each:

   Title:

  

   Author:

  

   Binding type:

  

   Number of pages:

  

   Price:

  

.

Елемент for-each виконує два основні завдання:

здійснює виведення блоку елементів, що містяться усередині елемента for-each, повторюючи його для кожного XML-елемента в документі, що відповідає зразку, привласненому атрибуту select елементу for-each. У даному прикладі цикл виконується один раз для кожного елемента BOOK, знайденого в елементі Документ з ім'ям INVENTORY. Зразок, що привласнюється атрибуту select, працює так само, як і зразок, що привласнюється атрибуту select елементу value-of;

в елементі for-each задається поточний елемент, що встановлюється атрибутом select елемента for-each (/INVENTORY/BOOK у нашому прикладі вказує на елемент BOOK усередині елемента INVENTORY, що входить у кореневий елемент документа) таким чином:

  

     

  

  

  

  

Аналогічно в елементі for-each кожен дочірній елемент може бути вибраний шляхом завдання зразка, що містить тільки ім'я елемента, наприклад:

.

У результаті виводяться дані зі всіх елементів BOOK, знайдених у документі, незалежно від того, скільки цих елементів містить документ. На рисунку 14 показано як виглядає результат у браузері. (У вікні відображують тільки перші три елементи BOOK; щоб відображувати останні, необхідно здійснити прокрутку вниз).

 

Рисунок 14 – Відображення елементів документа



загрузка...