|
Почему при использовании скриптов, приведенных в курсе Основы XML лекция Лекция 8: Отображение XML-документов с использованием связывания данных не происходит связывания XLM документа с HTML? Отображаются пустые поля. Браузер IE11 |
Отображение XML-документов с использованием связывания данных
Связывание HTML-элементов с XML-атрибутами
В рассмотренном примере XML-документа ни один из элементов не имел атрибутов. Атрибуты несколько усложняют связывание данных, хотя при этом вы можете сцеплять как элементы, имеющие атрибуты, так и сами атрибуты.
При связывании данных атрибут трактуется как дочерний элемент.
Для элемента record такая трактовка облегчает доступ (или позволяет игнорировать) к атрибуту. Например, следующая запись BOOK содержит атрибут с именем InStock:
<BOOK InStock="yes"> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR>Mark Twain</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK>
Эта запись трактуется так, как если бы атрибут InStock был полем, принадлежащим BOOK, а значение yes было бы содержимым этого поля. Таким образом, элемент BOOK воспринимался бы в соответствии со следующей структурой:
<BOOK> <InStock>yes</InStock> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR>Mark Twain</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK>
Следовательно, вы можете получить доступ к значению атрибута с использованием обычной техники связывания данных. Например, следующий элемент SPAN сцеплен с атрибутом и отображает его значение:
<SPAN DATASRC="#dsoInventory" DATAFLD="InStock"></SPAN>
(В этом примере предполагается, что XML-документ связан со страницей через фрагмент данных с именем dsoInventory.)
Следует учитывать, однако, что при добавлении атрибута к одному из элементов-полей в XML-документе – например, добавлении атрибута к полю AUTHOR:
<BOOK> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR Born="1835">Mark Twain</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK>
После связывания данных элемент AUTHOR будет интерпретирован следующим образом:
<AUTHOR> <Born>1835</Born> Mark Twain </AUTHOR>
В результате DSO будет хранить элемент как вложенную запись, а не как поле. (Напомним, что поля элементов могут содержать только символьные данные, но не дочерние элементы.) Следовательно, набор записей превратится в иерархический набор, а не в простой набор записей, и вам придется отображать вложенные записи с использованием вложенной таблицы, как описано в разделе "Использование вложенной таблицы для отображения иерархической структуры записей" ранее в этой лекции.
Чтобы иметь возможность отобразить как символьные данные (Mark Twain), так и атрибут как вложенную запись, вам следует иметь в виду то обстоятельство, что DSO использует специальное имя $TEXT для обращения ко всем символьным данным элемента, не включая при этом значений атрибута. Так, элемент AUTHOR будет интерпретирован следующим образом:
<AUTHOR> <Born>1835</Born> <$TEXT>Mark Twain</$TEXT> </AUTHOR>
Вы можете использовать имя $TEXT в качестве имени поля, чтобы связать ячейку таблицы с символьными данными, содержащимися в записи AUTHOR.
В Листинге 8.14 представлена HTML-страница, демонстрирующая все рассмотренные в этом разделе приемы. Эта страница отображает XML-документ Inventory Valid.xml (см. Листинг 5.1).
<!-- Имя файла: Inventory Attribute.htm -->
<HTML>
<HEAD>
<TITLE>Book Inventory</TITLE>
</HEAD>
<BODY>
<XML ID="dsoInventory" SRC="Inventory Valid.xml"></XML>
<H2>Book Inventory</H2>
<TABLE DATASRC="#dsoInventory" BORDER="1" CELLPADDING="5">
<THEAD>
<TH>Title</TH>
<TH>Author</TH>
<TH>Binding</TH>
<TH>Pages</TH>
<TH>Price</TH>
<TH>In Stock?</TH>
</THEAD>
<TR ALIGN="center">
<TD>
<TABLE DATASRC="#dsoInventory" DATAFLD="TITLE">
<TR>
<TD><SPAN DATAFLD="$TEXT"></SPAN></TD>
</TR>
</TABLE>
</TD>
<TD>
<TABLE DATASRC="#dsoInventory" DATAFLD="AUTHOR">
<TR>
<TD><SPAN DATAFLD="$TEXT"></SPAN></TD>
<TD><SPAN DATAFLD="Born"></SPAN></TD>
</TR>
</TABLE>
</TD>
<TD><SPAN DATAFLD="BINDING"></SPAN></TD>
<TD><SPAN DATAFLD="PAGES"></SPAN></TD>
<TD><SPAN DATAFLD="PRICE"></SPAN></TD>
<TD><SPAN DATAFLD="InStock"></SPAN></TD>
</TR>
</TABLE>
</BODY>
</HTML>
Листинг
8.14.
Имя файла: Inventory Attribute.htm
На рисунке 8.8 показано как Internet Explorer 5 отобразит документ из Листинга 8.14.
На этой странице в последнем столбце внешней таблицы отображены значения атрибута InStock записи BOOK путем обычного сцепления его с элементом SPAN:
<TD><SPAN DATAFLD="InStock"></SPAN></TD>
Поскольку дочерний элемент AUTHOR элемента BOOK содержит атрибут ( Born ), он интерпретируется как вложенная запись, а не как поле, поэтому страница отображает его с помощью вложенной таблицы:
<TD>
<TABLE DATASRC="#dsoInventory" DATAFLD="AUTHOR">
<TR>
<TD><SPAN DATAFLD="$TEXT"></SPAN></TD>
<TD><SPAN DATAFLD="Born"></SPAN></TD>
</TR>
</TABLE>
</TD>Специальное имя $TEXT ссылается на весь текст внутри элемента AUTHOR, не включая значения атрибута. Этот текст состоит из имени автора (например, Mark Twain).
Заметим, что поскольку элемент TITLE в BOOK может включать дочерний элемент ( SUBTITLE ), он также интерпретируется как вложенная запись, а не как поле, и должен также быть отображен с использованием вложенной таблицы:
<TD>
<TABLE DATASRC="#dsoInventory" DATAFLD="TITLE">
<TR>
<TD><SPAN DATAFLD="$TEXT"></SPAN></TD>
</TR>
</TABLE>
</TD>Здесь $TEXT используется для отображения всех символьных данных записи. (Нельзя установить связь только с текстом заголовка, не включая подзаголовка.)
