Использование одной HTML-таблицы для отображения простого набора записей

Можно использовать один HTML-элемент TABLE для отображения XML-документа, в котором данные организованы в виде простого набора записей - т.е. XML-документа, составленного следующим образом:

· корневой элемент содержит множество элементов типа запись (record) (в этой главе подобные элементы иногда называются просто записями);

· каждый элемент типа запись содержит одинаковый набор элементов типа поле (field) (в этой главе подобные элементы иногда называются просто полями);

· каждый элемент типа поле содержит только символьные данные. (Если дочерний элемент элемента запись содержит один или несколько своих собственных дочерних элементов, DSO интерпретирует его как вложенную запись, а не как поле (о том, как отображать вложенные поля, см. УМК, тема 6, раздел 6.7 ).

Примером такого типа XML-документов является документ, представленный в Листинге 1. В этом документе корневой элемент (INVENTORY) содержит набор из четырёх элементов-записей (элементы BOOK), и каждый из элементов-записей имеет одинаковый набор элементов-полей, которые содержат только символьные данные (TITLE, AUTHOR, BINDING, PAGES, PRICE).

Листинг 1

<?xml version="1.0"?>

<!-- Имя файла: Inventory.xml -->

<INVENTORY>

<BOOK>

<TITLE>Война и мир</TITLE>

<AUTHOR>Лев Толстой</AUTHOR>

<BINDING>Жёсткая обложка</BINDING>

<PAGES>510</PAGES>

<PRICE>12 000 рублей</PRICE>

</BOOK>

<BOOK>

<TITLE>Преступление и наказание</TITLE>

<AUTHOR>Фёдор Достоевский</AUTHOR>

<BINDING>Мягкая обложка</BINDING>

<PAGES>590</PAGES>

<PRICE>14 000 рублей</PRICE>

</BOOK>

<BOOK>

<TITLE>Королева Марго</TITLE>

<AUTHOR>Александр Дюма</AUTHOR>

<BINDING> Мягкая обложка </BINDING>

<PAGES>410</PAGES>

<PRICE>10 000 рублей</PRICE>

</BOOK>

<BOOK>

<TITLE>Затерянный мир</TITLE>

<AUTHOR>Артур Конан Дойль</AUTHOR>

<BINDING>Жёсткая обложка</BINDING>

<PAGES>350</PAGES>

<PRICE>9 000 рублей</PRICE>

</BOOK>

</INVENTORY>

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

В качестве примера возьмем HTML-страницу из Листинга 2, которая содержит таблицу, сцепленную с данными документа из Листинга 1 (файл "Inventory.xml").

Листинг 2

<HTML>

<HEAD>

<TITLE>Опись книг</TITLE>

</HEAD>

<BODY>

<XML ID="dsoInventory" SRC="Inventory.xml"></XML>

<H2>Опись книг</H2>

<TABLE DATASRC="#dsoInventory" BORDER="1" CELLPADDING="5">

<THEAD>

<TH>Заголовок</TH>

<TH>Автор</TH>

<TH>Обложка</TH>

<TH>Страниц</TH>

<TH>Цена</TH>

</THEAD>

<TR ALIGN="center">

<TD><SPAN DATAFLD="TITLE" STYLE="font-style:italic"></SPAN></TD>

<TD><SPAN DATAFLD="AUTHOR"></SPAN></TD>

<TD><SPAN DATAFLD="BINDING"></SPAN></TD>

<TD><SPAN DATAFLD="PAGES"></SPAN></TD>

<TD>< SPAN DATAFLD ="РRIСЕ"></SPAN></TD>

</TR>

</TABLE>

</BODY>

</HTML>

XML-документ из Листинга 1 связан с HTML-страницей из Листинга 2 посредством фрагмента данных на этой странице, имеющего ID dsoInventory:

<XML ID="dsoInventory" SRC="Inventory.xml"></XML>

Элемент TABLE страницы сцеплен со всем XML-документом путем присвоения атрибуту DATASRC элемента идентификатора (ID) фрагмента данных, предваренного символом #:

<TABLE DATASRC="#dsoInventory" BORDER="1" CELLPADDING="5">

Таблица определена со стандартным заголовком (элемент THEAD) и с одной строкой (элемент TR). Каждая ячейка в этой строке (т.е., каждый элемент TD) состоит из элемента SPAN, который сцеплен с одним из полей XML-документа таким образом, что этот элемент отображает содержимое поля. Например, первая ячейка содержит элемент SPAN, сцепленный с полем TITLE:

<TD><SPAN DATAFLD="TITLE" STYLE="font-style:italic"></SPAN></TD>

Элемент SPAN связывается с полем XML путем присвоения имени поля (в данном примере TITLE) атрибуту DATAFLD элемента.

Вот как работает связывание данных: даже если в элементе TABLE определена только одна строка, когда браузер отображает таблицу, он повторяет строковый элемент для каждой записи в XML-документе. Т.е., в первой строке, следующей за заголовком, отображены поля (TITLE, AUTHOR и т.д.), принадлежащие первой записи (элемент BOOK для книги “Война и мир”). В следующей строке отображены поля для второй записи (элемент BOOK для книги Преступление и наказание) и т.д. На следующем рисунке показано как выглядит документ в браузере.

Использование одной HTML-таблицы для отображения простого набора записей - student2.ru

Рисунок 1. Отображение XML-документа с простым набором записей

Может возникнуть вопрос, почему ячейки (элементы TD) не сцеплены непосредственно с полями XML. Ответ заключается в том, что элементTD не является связываемым HTML-элементом. (Связываемые элементы перечислены в УМК в разделе 6.10 в таблице 5.18.) Следовательно, необходимо включить внутрь каждого элемента TD связываемый элемент (обычно SPAN).



Наши рекомендации