У прикладі, що розглянуто вище, 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; щоб відображувати останні, необхідно здійснити прокрутку вниз).