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

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

Использование одного шаблона XSL

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

В Листинге 10.1 представлен первый пример XSL-таблицы стилей. Эта таблица стилей связана с XML-документом, представленным в Листинге 10.2.

<?xml version="1.0"?>

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

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="1.0">
   <xsl:template match="/">
      <H2>Book Description</H2>
      <SPAN STYLE="font-style:italic">Author: </SPAN>
      <xsl:value-of select="BOOK/AUTHOR"/><BR/>
      <SPAN STYLE="font-style:italic">Title: </SPAN>
      <xsl:value-of select="BOOK/TITLE"/><BR/>
      <SPAN STYLE="font-style:italic">Price: </SPAN>
      <xsl:value-of select="BOOK/PRICE"/><BR/>
      <SPAN STYLE="font-style:italic">Binding type: </SPAN>
      <xsl:value-of select="BOOK/BINDING"/><BR/>
      <SPAN STYLE="font-style:italic">Number of pages: </SPAN>
      <xsl:value-of select="BOOK/PAGES"/>
   </xsl:template>
</xsl:stylesheet>
Листинг 10.1. XslDemo01.xsl
<?xml version="1.0"?>

<!-- File name: XslDemo01.xml -->

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

<BOOK>
   <TITLE>Moby-Dick</TITLE>
   <AUTHOR>
      <FIRSTNAME>Herman</FIRSTNAME>
      <LASTNAME>Melville</LASTNAME>
   </AUTHOR>
   <BINDING>hardcover</BINDING>
   <PAGES>724</PAGES>
   <PRICE>$9.95</PRICE>
</BOOK>
Листинг 10.2. XslDemo01.xml

На рисунке 10.1 показано как Internet Explorer 5 отображает XML-документ в соответствии с инструкциями из таблицы стилей.


Рис. 10.1.

Каждая XSL-таблица стилей должна иметь элемент Документ, представленный ниже. (Напомним, что элемент Документ, известный как корневой элемент, является XML-элементом верхнего уровня, который содержит все остальные элементы.)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<!-- один или несколько элементов шаблона …-->
</xsl:stylesheet>

Элемент Документ xsl:stylesheet служит не только хранилищем других элементов, но также идентифицирует документ как XSL-таблицу стилей. Этот элемент является одним из XSL-элементов специального назначения, используемых в таблице стилей. Все XSL-элементы принадлежат пространству имен xsl – т. е. вы предваряете имя каждого XSL-элемента префиксом xsl:, обозначающим пространство имен. Вы определяете это пространство имен в начальном теге элемента xsl:stylesheet, например, следующим образом:

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

Это определение позволяет вам использовать пространство имен внутри элементов таблицы стилей. (Относительно пространства имен в XML см. раздел "Вставка HTML-элементов в XML-документы и использование пространства имен" в "Отображение XML-документов с использованием таблиц каскадных стилей" .)

Элемент Документ xsl:stylesheet XSL-таблицы стилей должен содержать один или несколько шаблонов элементов, которые для краткости будем называть шаблонами. Элемент Документ из Листинга 10.1 содержит только один шаблон, который имеет следующую форму:

<xsl:template match="/">
	<!-- дочерние элементы … -->
</xsl:template>

Браузер использует шаблон для отображения определенной ветви элементов в иерархии XML-документа, с которым вы связываете таблицу стилей. Атрибут match шаблона указывает на определенную ветвь. (Атрибут match аналогичен селектору в правиле CSS). Значение атрибута match носит название образца (pattern). Образец в данном примере ("/") представляет корневой элемент всего XML-документа. Этот шаблон, таким образом, содержит инструкции для отображения всего XML-документа.

Каждая XSL-таблица стилей должна содержать один и только один шаблон с атрибутом match, который имеет значение "/". Вы также можете включить один или несколько дополнительных шаблонов с инструкциями для отображения определенных подчиненных ветвей в структуре XML-документа; каждая из них должна иметь образец, отвечающий определенной ветви.

Корневой образец ("/") не представляет элемент Документ (или корневой элемент) XML-документа. Он представляет весь документ, для которого элемент Документ является дочерним. (Т. е. он аналогичен корневому узлу Document в объектной модели документа DOM, рассмотренной в "Отображение XML-документов с использованием сценариев объектной модели документа" .)

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

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

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

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

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

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

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

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

Спасибо!

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

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2715102498896watchdog( )../bootstrap.inc:0
23.2719102501360module_invoke( )../bootstrap.inc:967
33.2719102503216call_user_func_array ( )../module.inc:462
43.2719102503552devel_watchdog( )../module.inc:462
53.2720102504400decode_entities( )../devel.module:382
63.2720102506320drupal_error_handler( )../devel.module:340
73.2720102509928watchdog( )../common.inc:663
83.2721102511992module_invoke( )../bootstrap.inc:967
93.2721102513848call_user_func_array ( )../module.inc:462
103.2721102514184devel_watchdog( )../module.inc:462
113.2721102514880decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2715102498896watchdog( )../bootstrap.inc:0
23.2719102501360module_invoke( )../bootstrap.inc:967
33.2719102503216call_user_func_array ( )../module.inc:462
43.2719102503552devel_watchdog( )../module.inc:462
53.2720102504400decode_entities( )../devel.module:382
63.2720102506320drupal_error_handler( )../devel.module:340
73.2720102509928watchdog( )../common.inc:663
83.2721102511992module_invoke( )../bootstrap.inc:967
93.2721102513848call_user_func_array ( )../module.inc:462
103.2721102514184devel_watchdog( )../module.inc:462
113.2721102514880decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2715102498896watchdog( )../bootstrap.inc:0
23.2719102501360module_invoke( )../bootstrap.inc:967
33.2719102503216call_user_func_array ( )../module.inc:462
43.2719102503552devel_watchdog( )../module.inc:462
53.2720102504400decode_entities( )../devel.module:382
63.2727102506512drupal_error_handler( )../devel.module:340
73.2727102510200watchdog( )../common.inc:663
83.2727102512264module_invoke( )../bootstrap.inc:967
93.2728102514120call_user_func_array ( )../module.inc:462
103.2728102514456devel_watchdog( )../module.inc:462
113.2728102515232decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2715102498896watchdog( )../bootstrap.inc:0
23.2719102501360module_invoke( )../bootstrap.inc:967
33.2719102503216call_user_func_array ( )../module.inc:462
43.2719102503552devel_watchdog( )../module.inc:462
53.2720102504400decode_entities( )../devel.module:382
63.2727102506512drupal_error_handler( )../devel.module:340
73.2727102510200watchdog( )../common.inc:663
83.2727102512264module_invoke( )../bootstrap.inc:967
93.2728102514120call_user_func_array ( )../module.inc:462
103.2728102514456devel_watchdog( )../module.inc:462
113.2728102515232decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2734102499440watchdog( )../bootstrap.inc:0
23.2734102501504module_invoke( )../bootstrap.inc:967
33.2734102503360call_user_func_array ( )../module.inc:462
43.2734102503696devel_watchdog( )../module.inc:462
53.2735102504400decode_entities( )../devel.module:382
63.2735102506320drupal_error_handler( )../devel.module:340
73.2735102509928watchdog( )../common.inc:663
83.2735102511992module_invoke( )../bootstrap.inc:967
93.2735102513848call_user_func_array ( )../module.inc:462
103.2735102514184devel_watchdog( )../module.inc:462
113.2736102514880decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2734102499440watchdog( )../bootstrap.inc:0
23.2734102501504module_invoke( )../bootstrap.inc:967
33.2734102503360call_user_func_array ( )../module.inc:462
43.2734102503696devel_watchdog( )../module.inc:462
53.2735102504400decode_entities( )../devel.module:382
63.2735102506320drupal_error_handler( )../devel.module:340
73.2735102509928watchdog( )../common.inc:663
83.2735102511992module_invoke( )../bootstrap.inc:967
93.2735102513848call_user_func_array ( )../module.inc:462
103.2735102514184devel_watchdog( )../module.inc:462
113.2736102514880decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2734102499440watchdog( )../bootstrap.inc:0
23.2734102501504module_invoke( )../bootstrap.inc:967
33.2734102503360call_user_func_array ( )../module.inc:462
43.2734102503696devel_watchdog( )../module.inc:462
53.2735102504400decode_entities( )../devel.module:382
63.2740102506512drupal_error_handler( )../devel.module:340
73.2741102510200watchdog( )../common.inc:663
83.2741102512264module_invoke( )../bootstrap.inc:967
93.2741102514120call_user_func_array ( )../module.inc:462
103.2741102514456devel_watchdog( )../module.inc:462
113.2741102515232decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2734102499440watchdog( )../bootstrap.inc:0
23.2734102501504module_invoke( )../bootstrap.inc:967
33.2734102503360call_user_func_array ( )../module.inc:462
43.2734102503696devel_watchdog( )../module.inc:462
53.2735102504400decode_entities( )../devel.module:382
63.2740102506512drupal_error_handler( )../devel.module:340
73.2741102510200watchdog( )../common.inc:663
83.2741102512264module_invoke( )../bootstrap.inc:967
93.2741102514120call_user_func_array ( )../module.inc:462
103.2741102514456devel_watchdog( )../module.inc:462
113.2741102515232decode_entities( )../devel.module:382