Опубликован: 24.01.2007 | Уровень: для всех | Доступ: платный
Лекция 10:

Отображение XML-документов с использованием XSL-таблиц стилей

Фильтрация и сортировка данных XML

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

Фильтрация

Значение, которое присваивается атрибутам match или select, представляет собой образец, соответствующий одному или нескольким элементам в XML-документе. (Атрибут match используется для элемента template, а атрибут select – для элементов value-of, for-each и apply-templates.) Образцы, с которыми вы имели дело до сих пор, содержали только оператор пути, который задавал имя элемента и, возможно, одного или нескольких вложенных элементов. Вы можете ограничить количество элементов, отвечающих шаблону, введя фильтр – выражение, заключенное в квадратные скобки ( [] ) и следующее непосредственно за оператором пути. Например, образец, присвоенный следующему атрибуту match, указывает, что соответствующий элемент должен носить имя BOOK, и кроме того (это определяется фильтром), должен иметь дочерний элемент BINDING, который содержит текст "trade paperback":

<xsl:template match="BOOK[BINDING='trade paperback']">

Если в фильтр включено только имя элемента, то соответствующий элемент должен иметь дочерний элемент с указанным именем. Например, следующий образец отвечает любому элементу ITEM, имеющему дочерний элемент с именем CD, независимо от содержимого элемента CD:

match="ITEM[CD]"

Следующий образец отвечает любому элементу SHIRT, имеющему дочерний элемент COLOR, содержащий текст "red":

match="SHIRT[COLOR='red']"

А следующий образец, наоборот, отвечает любому элементу SHIRT, имеющему дочерний элемент COLOR, который не содержит текст "red":

select="SHIRT[COLOR!='red']"

Примечание. Если элемент имеет более одного дочернего элемента с именем, указанным в условии фильтрации, оператор сравнения применяется только к первому дочернему элементу. Например, если элемент SHIRT имеет два дочерних элемента COLOR, образец "SHIRT[COLOR='red']" будет отвечать элементу, только если первый элемент COLOR содержит слово "red".

Сортировка

В этой лекции вы уже познакомились с двумя элементами, которые вы можете использовать для обработки повторяющихся элементов: for-each и apply-templates. Вы можете использовать атрибут order-by для этих элементов, чтобы управлять порядком, в котором браузер обрабатывает элементы, тем самым осуществляя сортировку данных XML.

Вы можете назначать атрибуту order-by один или несколько образцов, разделяя их точкой с запятой. Браузер будет сортировать элементы с использованием образцов в том порядке, в котором они перечислены. Для указания направления сортировки (по возрастанию или по убыванию) следует предварить образец префиксом + или – .

Например, атрибут order-by, установленный для следующего элемента for-each, предписывает браузеру сортировать элементы BOOK по фамилиям авторов в порядке возрастания, а также осуществлять сортировку для одинаковых фамилий по именам, также по возрастанию:

<xsl:for-each select="INVENTORY/BOOK"
	order-by="+AUTHOR/LASTNAME; +AUTHOR/FIRSTNAME">

В другом примере следующая установка order-by осуществляет сортировку элементов BOOK по названиям книг по убыванию:

<xsl:apply-templates select="INVENTORY/BOOK" order-by="-TITLE">

Оператор пути, который вы присваиваете атрибуту order-by, действует относительно образца, назначенного атрибуту select. Так, в данном примере установка order-by="-TITLE" указывает на элемент TITLE внутри элемента BOOK, вложенного в элемент INVENTORY.

Максим Попов
Максим Попов

Почему при использовании скриптов, приведенных в курсе Основы XML

лекция Лекция 8: 

Отображение XML-документов с использованием связывания данных

не происходит связывания XLM документа с HTML?

Отображаются пустые поля. Браузер IE11

Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Наталья Алмаева
Наталья Алмаева
Россия
Светлана Казьмина
Светлана Казьмина
Россия, Волгодонск