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

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

Другие способы связывания данных

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

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

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

Таблица 8.3. Сцепляемые HTML-элементы (за исключением элемента TABLE)
HTML-элемент Назначение элемента Свойство (или свойства) для сцепления элемента Передает ли разметку HTML, содержащуюся в поле XML? Обновляет ли сцепленное поле XML?
A Элемент "анкер"; указывает на начало или место назначения гиперссылки href Нет Нет
APPLET Добавляет на страницу фрагмент кода Java param Нет Да
BUTTON Отображает кнопку управления innerHTML и innerText Да Нет
DIV Используется для форматирования части документа, такой как глава, раздел или приложение innerHTML и innerText Да Нет
FRAME Содержит отдельный фрейм (кадр) в наборе фреймов src Нет Нет
IFRAME Создает не выделенный обтекаемый фрейм src Нет Нет
IMG Отображает рисунок или видеоклип src Нет Нет
INPUT TYPE=CHECKBOX Отображает поле флажка в форме checked Нет Да
INPUT TYPE=HIDDEN Хранит и предоставляет информацию на сервер, вместо отображения в форме value Нет Да
INPUT TYPE=PASSWORD Аналогично INPUT TYPE=TEXT, но вводимый пользователем текст не отображается value Нет Да
INPUT TYPE=RADIO Отображает в форме радио-кнопку checked Нет Да
INPUT TYPE=TEXT Разрешает пользователю ввести однострочный текст в форме value Нет Да
LABEL Отображает текстовую надпись (этикетку) innerText и innerHTML Да Нет
MARQUEE Отображает текст с прокруткой innerText и innerHTML Да Нет
SELECT Отображает поле списка Свойство text для выбранного элемента списка Нет Да
SPAN Используется для форматирования фрагмента текста (например, текста внутри элемента P [абзац] или DIV ) innerText и innerHTML Да Нет
TEXTAREA Разрешает пользователю вводить многострочный текст value Нет Да

Связывание с другими HTML-элементами

При связывании элемента SPAN с полем XML, элемент просто отображает содержимое поля. Это происходит потому, что свойство innerText элемента SPAN, которое определяет текст, отображаемый элементом, сцеплено с полем XML.

Примечание. В DHTML, поддерживаемом Internet Explorer 5, каждый HTML-элемент обладает набором свойств, которые вы можете использовать для установки или извлечения различных характеристик элемента с помощью кода сценария. Кроме того, как пояснено в этом разделе, для свойства автоматически устанавливается значение поля XML, с которым оно сцеплено.

Однако, как видно из Таблицы 8.3, для некоторых сцепляемых HTML-элементов с полем XML сцепляются и другие свойства.

Примечание. При связывании с элементом SPAN реально сцепляются его свойства innerText и innerHTML. Свойство innerText устанавливает или получает текстовое содержимое элемента, не включая в него HTML-разметку. Свойство innerHTML устанавливает или получает полное содержимое элемента, включая любую HTML-разметку.

Например, для следующего сцепленного элемента A (элемент "анкер", используемый для создания гиперссылок) свойство href сцеплено с полем XML:

<A DATASRC="dsoInventory" DATAFLD="REVIEWS">
  Click here for reviews
</A>

Это свойство, как и атрибут HREF элемента, устанавливает URL для гиперссылки. Следовательно, из поля XML извлекается URL гиперссылки для сцепленного элемента A, а не его текстовое содержимое. (XML-поле REVIEWS в рассматриваемом примере должно содержать корректный URL.)

В качестве другого примера рассмотрим связывание поля флажка элемента INPUT через свойство checked (которое изменяет статус выбора элемента (установлен или сброшен флажок)) с XML-полем:

<INPUT TYPE="CHECKBOX" DATASRC="#dsoInventory" DATAFLD="INSTOCK">

Если XML-поле INSTOCK пусто, либо содержит текст "0" или "false", то поле флажка очищается. Если оно содержит какой-либо другой текст, флажок устанавливается.

В качестве последнего примера рассмотрим элемент IMG (изображение), свойство src которого сцеплено с XML-полем. Это свойство, как и атрибут SRC элемента, задает URL файла, содержащего графические данные. Листинги 8.10 и 8.11 иллюстрируют технику сцепления для элемента IMG.

<?xml version="1.0" encoding="windows-1251" ?>

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

<INVENTORY>
   <BOOK>
      <COVERIMAGE>Leaves.bmp</COVERIMAGE>
      <TITLE>Leaves of Grass</TITLE>
      <AUTHOR>Walt Whitman</AUTHOR>
      <BINDING>hardcover</BINDING>
      <PAGES>462</PAGES>
      <PRICE>$7.75</PRICE>
   </BOOK>
   <BOOK>
      <COVERIMAGE>Legend.bmp</COVERIMAGE>
      <TITLE>The Legend of Sleepy Hollow</TITLE>
      <AUTHOR>Washington Irving</AUTHOR>
      <BINDING>mass market paperback</BINDING>
      <PAGES>98</PAGES>
      <PRICE>$2.95</PRICE>
   </BOOK>
   <BOOK>
      <COVERIMAGE>Moby.bmp</COVERIMAGE>
      <TITLE>Moby-Dick</TITLE>
      <AUTHOR>Herman Melville</AUTHOR>
      <BINDING>hardcover</BINDING>
      <PAGES>724</PAGES>
      <PRICE>$9.95</PRICE>
   </BOOK>
</INVENTORY>
Листинг 8.10. Inventory Image.xml
<!-- Имя файла: Inventory Image Table.htm -->

<HTML>

<HEAD>
   <TITLE>Book Inventory</TITLE>
</HEAD>

<BODY>

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

   <H2>Book Inventory</H2>
   
   <TABLE DATASRC="#dsoInventory" BORDER="1" CELLPADDING="5">
      <THEAD>
         <TH>Cover</TH>
         <TH>Title</TH>
         <TH>Author</TH>
         <TH>Binding</TH>
         <TH>Pages</TH>
         <TH>Price</TH>
      </THEAD>     
      <TR ALIGN="center">
         <TD><IMG DATAFLD="COVERIMAGE"></TD>
         <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="PRICE"></SPAN></TD>
      </TR>
   </TABLE>

</BODY>

</HTML>
Листинг 8.11. Inventory Image Table.htm

Листинг 8.10 есть XML-документ, который содержит поле с именем COVERIMAGE в каждой записи BOOK. Каждое поле COVERIMAGE содержит URL графического файла, который хранит рисунок обложки книги. Листинг 8.11 – это та же самая HTML-страница, что и в Листинге 8.2, за исключением того, что в начало каждой строки таблицы добавлена дополнительная ячейка (элемент TD ), которая содержит элемент IMG, а не SPAN. Элемент IMG сцеплен с полем COVERIMAGE XML-документа, и поэтому отобразит рисунок обложки для каждой книги, как показано на рисунке 8.6.


Рис. 8.6.

Вы можете поэкспериментировать со связыванием некоторых других HTML-элементов, содержащихся в Таблице 8.3, чтобы познакомиться с их сцепляемыми свойствами и способами использования элементами данных, предоставляемых XML-полями, с которыми они сцеплены.

Передача HTML-разметки

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

<SPAN DATASRC="#dsoInventory" DATAFLD="AUTHOR-BIO"></SPAN>

Если поле AUTHOR-BIO содержит элемент I (курсив), например:

<AUTHOR-BIO>Henry James was an American author who lived from 1843
     to 1916, and wrote <I>The Bostonians</I> 
     and many other works of psychologically realistic fiction.</AUTHOR-BIO>

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

Henry James was an American author who lived from 1843 to 1916, and wrote
<I>The Bostonians</I> and many other works of psychologically realistic fiction.

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

<SPAN DATASRC="#dsoInventory" DATAFLD="AUTHOR-BIO"
  DATAFORMATAS="HTML"></SPAN>

Текст внутри элемента I будет воспринят как текст с курсивным начертанием:

Henry James was an American author who lived from 1843 to 1916, and wrote
The Bostonians and many other works of psychologically realistic fiction.

Примечание. Присвоение атрибуту DATAFORMATAS его значения по умолчанию, "TEXT", дает тот же эффект, что и пропуск этого атрибута – символы HTML-разметки будут восприниматься как литералы.

Чтобы узнать, какие элементы вы можете использовать для передачи HTML-разметки посредством установки атрибута DATAFORMATAS="HTML", обратитесь к таблице 8.3. Для таких элементов в предпоследнем столбце таблицы ("Передает ли разметку HTML, содержащуюся в поле XML?") стоит "Да".

Вставка и передача HTML-разметки в XML-поля весьма полезна для изменения формата части текста (например, с использованием элементов I или B ) и для включения HTML-элементов, таких как гиперссылки или изображения, в текст. Хотя форматирование XML-текста путем включения в XML HTML-разметки нарушает принцип разделения данных и форматов, при связывании данных эта техника является единственным подходящим способом модификации формата или включения HTML-элементов внутрь поля. (При использовании других методов отображения XML, рассматриваемых в этом курсе, вы обычно имеете возможность форматировать или вставлять элементы внутрь XML-элемента путем включения дочерних элементов и соответствующей их обработки.)

Когда вы добавляете HTML-разметку в XML-поле, вы не можете помещать в текст символ левой угловой скобки (<) или знак амперсанда (&) как литералы. (Напомним, что эти символы недопустимы в символьных данных элемента.) Однако вы можете вставлять их с использованием предопределенных ссылок на примитивы &lt; и &amp;. Другой возможностью сделать HTML-разметку более наглядной, что особенно полезно для большого фрагмента HTML, является использование разделов CDATA (см. "Добавление комментариев, инструкций по обработке и разделов CDATA" ).

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

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

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

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

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

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

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

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

Спасибо!

Зарина Каримова
Зарина Каримова
Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008
Akiyev Begench
Akiyev Begench
Беларусь, Полоцк, полоцкий государственный университет