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

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

Использование нескольких шаблонов

Другой способ отображения повторяющихся XML-элементов состоит в создании отдельного шаблона для каждого элемента с последующим вызовом этого шаблона с использованием XSL-элемента apply-templates. Пример использования подобной методики приведен в XSL-таблице стилей, представленной в Листинге 10.5.

<?xml version="1.0"?>

<!-- File name: XslDemo03.xsl -->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="1.0">
   <xsl:template match="/">
      <H2>Book Inventory</H2>
      <xsl:apply-templates select="INVENTORY/BOOK" />
   </xsl:template>

   <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>
</xsl:stylesheet>
Листинг 10.5. XslDemo03.xsl

Эта таблица стилей предназначена для связывания с 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

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

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

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

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

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

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

Спасибо!

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