Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
xsl.doc
Скачиваний:
93
Добавлен:
09.05.2015
Размер:
3.45 Mб
Скачать

Листинг 10.5. XslDemo03.Xsl (html, txt)

Эта таблица стилей предназначена для связывания с XML-документом из Листинга 10.4, XslDemo.xml; установить эту связь вы можете путем модификации инструкции xml-stylesheet в документе следующим образом:

<?xml-stylesheet type="text/xsl" href="XslDemo03.xsl"?>

Рассматриваемая в примере таблица стилей содержит два шаблона. Один шаблон содержит инструкции для отображения всего документа (путем установки match="/", указывающей на корневую часть документа). Все XSL-таблицы стилей требуют наличия такого шаблона. Другой шаблон содержит инструкции для отображения элемента BOOK (шаблон с установкой match="BOOK" ). Сначала браузер обрабатывает шаблон, соответствующий корневой части элемента:

<xsl:template match="/">

<H2>Book Inventory</H2>

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

</xsl:template>

XSL-элемент apply-templates сообщает браузеру, что для каждого элемента BOOK внутри корневого элемента INVENTORY он должен обрабатывать шаблон, отвечающий элементу BOOK – т. е. шаблон, для атрибута match которого установлено значение "BOOK". Таблица стилей включает следующий шаблон, отвечающий элементу BOOK:

<xsl:template match="BOOK">

<SPAN STYLE="font-style:italic">Title: </SPAN>

<xsl:value-of select="TITLE"/><BR/>

<SPAN STYLE="font-style:italic">Author: </SPAN>

<xsl:value-of select="AUTHOR"/><BR/>

<SPAN STYLE="font-style:italic">Binding type: </SPAN>

<xsl:value-of select="BINDING"/><BR/>

<SPAN STYLE="font-style:italic">Number of pages: </SPAN>

<xsl:value-of select="PAGES"/><BR/>

<SPAN STYLE="font-style:italic">Price: </SPAN>

<xsl:value-of select="PRICE"/><P/>

</xsl:template>

Поскольку этот шаблон отвечает элементу BOOK, элемент BOOK является текущим элементом в контексте шаблона. В связи с этим доступ к дочерним элементам BOOK осуществляется посредством образца, содержащего только имя элемента, как в нашем примере:

<xsl:value-of select="TITLE"/>

Примечание. Если вы не укажете атрибут select для элемента apply-templates, браузер обрабатывает соответствующий шаблон (если он имеется) для каждого дочернего элемента текущего элемента. В рассматриваемом примере элемента apply-templates единственным дочерним элементом для текущего элемента (корневая часть документа) является элемент INVENTORY, который не имеет соответствующего шаблона. Таким образом, если вы опустите атрибут select, никакие данные не будут выведены.

Браузер обрабатывает шаблон BOOK один раз для каждого элемента BOOK, отображая всю информацию о книгах, имеющуюся в документе, как показано на рисунке 10.5.

Рис. 10.5. 

Фильтрация и сортировка данных 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".

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]