Использование одной 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 для книги Преступление и наказание) и т.д. На следующем рисунке показано как выглядит документ в браузере.
Рисунок 1. Отображение XML-документа с простым набором записей
Может возникнуть вопрос, почему ячейки (элементы TD) не сцеплены непосредственно с полями XML. Ответ заключается в том, что элементTD не является связываемым HTML-элементом. (Связываемые элементы перечислены в УМК в разделе 6.10 в таблице 5.18.) Следовательно, необходимо включить внутрь каждого элемента TD связываемый элемент (обычно SPAN).