![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Использование связывания данных по одной записи
Связывание данных по одной записи используется для HTML-элементов, которые не являются таблицами и не включены в связанную таблицу. HTML-элемент - например, SPAN, BUTTON или LABEL - связывается с отдельным полем XML. После этого HTML-элемент автоматически отображает содержимое поля XML, с которым он связан (сцеплен). Например, следующий HTML-элемент SPAN сцеплен с полем TITLE XML-документа, доступ к которому осуществляется через фрагмент данных dsoBook:
<SPAN DATASRC="#dsoBook" DATAFLD="TITLE"></SPAN> Поскольку HTML-элемент не имеет множественных частей, подобно таблице, он способен отобразить значение поля только для одной записи за раз. Чтобы использовать связывание данных по одной записи, XML-до-кумент должен быть организован как простой набор записей. (См. раздел “Использование одной HTML-таблицы для отображения простого набора записей” в начале этой главы.) Наипростейшим случаем связывания данных по одной записи является случай, когда XML-документ состоит только из одной записи, подобно документу из Листинга 1.14. В Листинге 1.19 представлена HTML-страница, которая связывает отдельный элемент SPAN с каждым из полей рассматриваемого документа (TITLE, AUTHOR, BINDING, PAGES, PRICE).
<HTML> <HEAD> <TITLE>Описание книги</TITLE> </HEAD> <BODY> <XML ID="dsoBook" SRC="Book.xml"></XML> <H2>Описание книги</H2> <SPAN STYLE="font-style:italic">Заголовок:</SPAN> <SPAN STYLE="font-weight:bold" DATASRC="#dsoBook" DATAFLD="TITLE"></SPAN> <BR> <SPAN STYLE="font-style:italic">Автор:</SPAN> <SPAN DATASRC="#dsoBook" DATAFLD="AUTHOR"></SPAN> <BR> <SPAN STYLE="font-style:italic">Тип обложки:</SPAN> <SPAN DATASRC="#dsoBook" DATAFLD="BINDING"></SPAN> <BR> <SPAN STYLE="font-style:italic">Количество страниц:</SPAN> <SPAN DATASRC="#dsoBook" DATAFLD="PAGES"></SPAN> <BR> <SPAN STYLE="font-style:italic">Цена:</SPAN> <SPAN DATASRC"#dsoBook" DATAFLD="PRICE"></SPAN> </BODY> </HTML> Листинг 1.19
На следующем рисунке показано, как Internet Explorer отобразит эту страницу. Рисунок 41. Отображение данных по одной записи
Перемещение между записями
Если XML-документ содержит более одной записи (как обычно бывает), связывание данных по записям становится несколько более сложным, поскольку HTML-элемент может отобразить зараз только одну запись. Отображаемая в данный момент запись называется текущей записью. (Связывание данных по одной записи иногда называют еще связыванием по текущей записи.) Изначально текущей является первая запись в документе. DSO (объект исходных данных), ассоциированный с XML-документом, предоставляет ряд методов (функций), которыми можно воспользоваться при перемещении между записями. Эти методы принадлежат объекту recordset DSO и приведены в таблице 5.17. Заметим, что примеры вызовов, приведенные в последнем столбце, предполагают, что HTML-страница содержит фрагмент данных XML с идентификатором (ID) dsoInventory. Таблица 5.17 Методы объекта recordset
К этим методам можно обращаться из написанного кода сценария. Однако самый простой способ их вызова - это присвоить имя метода атрибуту ONCLICK элемента BUTTON, как в следующем примере:
<BUTTON ONCLICK="dsolnventory.recordset.moveFirst()"> Первая запись </BUTTON> Этот элемент отображает кнопку. Когда пользователь щелкает мышью на кнопке, вызывается метод, присвоенный атрибуту ONCLICK, dsolnventory.recordset.moveFirst(). Если текущей является первая запись, вызов метода movePrevious() приводит к перемещению в зону начала файла (BOF), где нет записей, поэтому сцепленный элемент будет пуст. Аналогично, вызов метода moveNext, если текущей является последняя запись, приводит к перемещению в зону конца файла (EOF), поэтому сцепленный элемент также будет пуст. К счастью, объект recordset поддерживает свойство BOF, которое принимает значение true (истина), если достигнуто начало файла, а также свойство EOF, которое принимает значение true (истина), если достигнут конец файла. Эти свойства можно использовать для определения этих состояний и внесения необходимых корректировок. Например, приведенный ниже код предписывает при щелчке на кнопке в случае, если достигнуто начало файла, быстро отобразить первую запись:
<BUTTON ONCLICK="dsoInventory.recordset.movePrevious(); if (dsoInventory.recordset.BOF) dsoInventory.recordset.moveNext()"> Назад </BUTTON>
Следующий код проверяет достижение конца файла:
<BUTTON ONCLICK="dsoInventory.recordset.moveNext(); if (dsoInventory.recordset.EOF) dsoInventory.recordset.movePrevious()"> Вперёд </BUTTON>
Атрибуту ONCLICK (либо другим атрибутам, относящимся к событиям, например, ONMOUSEOVER) можно присвоить целый блок кода сценария. В этих примерах код написан на языке Microsoft JScript. Ниже представлен пример HTML-страницы, при помощи которой XML-документа из Листинга 1.1 отображается по одной записи за один раз. Страница содержит кнопки для перехода к первой, предыдущей, последующей и последней записям (см. рисунок 42).
<HTML> <HEAD> <TITLE>Описание книги</TITLE> </HEAD> <BODY> <XML ID="dsoInventory" SRC="Inventory.xml"></XML> <H2>Описание книги</H2> <SPAN STYLE="font-style:italic">Заголовок:</SPAN> <SPAN DATASRC="#dsoInventory" DATAFLD="TITLE" STYLE="font-weight:bold"></SPAN> <BR> <SPAN STYLE="font-style:italic">Автор:</SPAN> <SPAN DATASRC="#dsoInventory" DATAFLD="AUTHOR"></SPAN> <BR> <SPAN STYLE="font-style:italic">Тип обложки:</SPAN> <SPAN DATASRC="#dsoInventory" DATAFLD="BINDING"></SPAN> <BR> <SPAN STYLE="font-style:italic">Количество страниц:</SPAN> <SPAN DATASRC="#dsoInventory" DATAFLD="PAGES"></SPAN > <BR> <SPAN STYLE="font-style:italic">Цена: </SPAN> <SPAN DATASRC="#dsoInventory" DATAFLD="PRICE"></SPAN> <HR> <BUTTON ONCLICK="dsoInventory.recordset.moveFirst()"> |< First </BUTTON> <BUTTON ONCLICK="dsoInventory.recordset.movePrevious(); if (dsoInventory.recordset.BOF) dsoInventory.recordset.moveNext()"> < Back </BUTTON> <BUTTON ONCLICK="dsoInventory.recordset.moveNext(); if (dsoInventory.recordset.EOF) dsoInventory.recordset.movePrevious()"> Forward > </BUTTON> <BUTTON ONCLICK="dsoInventory.recordset.moveLast()"> Last >| </BUTTON> </BODY> </HTML> Листинг 1.20
![]() |