Почему при использовании скриптов, приведенных в курсе Основы XML лекция Лекция 8: Отображение XML-документов с использованием связывания данных не происходит связывания XLM документа с HTML? Отображаются пустые поля. Браузер IE11 |
Отображение XML-документов с использованием сценариев объектной модели документа
Доступ и отображение элементов XML-документа
В этом разделе вы познакомитесь с основными приемами использования HTML-страницы и DOM для отображения элементов XML-документа. Эти приемы демонстрируются в Листингах 9.2 и 9.3.
<?xml version="1.0" encoding="windows-1251" ?> <!-- Имя файла: Book.xml --> <BOOK> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR>Mark Twain</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK>Листинг 9.2. Book.xml
!-- Имя файла: DomDemo Fixed.htm --> <HTML> <HEAD> <TITLE>Book Description</TITLE> <SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD"> Document = dsoBook.XMLDocument; title.innerText= Document.documentElement.childNodes(0).text; author.innerText= Document.documentElement.childNodes(1).text; binding.innerText= Document.documentElement.childNodes(2).text; pages.innerText= Document.documentElement.childNodes(3).text; price.innerText= Document.documentElement.childNodes(4).text; </SCRIPT> </HEAD> <BODY> <XML ID="dsoBook" SRC="Book.xml"></XML> <H2>Book Description</H2> <SPAN STYLE="font-style:italic">Title: </SPAN> <SPAN ID="title" STYLE="font-weight:bold"></SPAN> <BR> <SPAN STYLE="font-style:italic">Author: </SPAN> <SPAN ID="author"></SPAN> <BR> <SPAN STYLE="font-style:italic">Binding: </SPAN> <SPAN ID="binding"></SPAN> <BR> <SPAN STYLE="font-style:italic">Number of pages: </SPAN> <SPAN ID="pages"></SPAN> <BR> <SPAN STYLE="font-style:italic">Price: </SPAN> <SPAN ID="price"></SPAN> </BODY> </HTML>Листинг 9.3. DomDemo Fixed.htm
Листинг 9.2 содержит простой XML-документ, который описывает одну книгу. Его корневой элемент, BOOK, содержит пять дочерних элементов ( TITLE, AUTHOR, BINDING, PAGES и PRICE ), каждый из которых содержит символьные данные, описывающие характеристики книги.
Листинг 9.3 содержит HTML-страницу, которая отображает содержимое каждого из дочерних элементов в XML-документе. На рисунке 9.2 показано как эта страница выглядит в Internet Explorer 5.
XML-документ связан со страницей через следующий фрагмент данных:
<XML ID="dsoBook" SRC="Book.xml></XML>
Страница отображает XML-документ посредством следующего блока кода сценария, который содержится в элементе HEAD страницы:
<SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD"> Document = dsoBook.XMLDocument; title.innerText= Document.documentElement.childNodes(0).text; author.innerText= Document.documentElement.childNodes(1).text; binding.innerText= Document.documentElement.childNodes(2).text; pages.innerText= Document.documentElement.childNodes(3).text; price.innerText= Document.documentElement.childNodes(4).text; </SCRIPT>
Установки атрибутов FOR="window" и EVENT="ONLOAD" предписывают браузеру выполнять код из элемента SCRIPT при первом открытии окна страницы до того, как будет отображено содержимое страницы.
Ссылка. Примеры сценариев в этой лекции написаны на языке Microsoft JScript – версии Microsoft родового языка для сценариев JavaScript. Полную информацию о JScript, включая учебник, вы можете найти на следующих Web-сайтах, предоставленных MSDN: http://msdn.microsoft.com/workshop/c-frame.htm#/workshop/languages/jscript/handling.asp и http://msdn.microsoft.com/scripting/default.htm?/scripting/jscript/default.htm.
Сценарий первым делом получает узел Document, который представляет весь документ и формирует корневой элемент иерархии узлов DOM. Он делает это через член XMLDocument DSO, как было описано ранее в этой лекции:
Document = dsoBook.XMLDocument;
Далее сценарий получает доступ и отображает символьные данные, содержащиеся в каждом из дочерних элементов корневого элемента ( TITLE, AUTHOR, BINDING, PAGES и PRICE ). Например, он отображает содержимое первого дочернего элемента ( TITLE ) следующим образом:
title.innerText= Document.documentElement.childNodes(0).text;
Вот пояснение выражения, стоящего справа от знака равенства.
- Document содержит узел Document в основании (корне) иерархии узлов DOM.
-
documentElement представляет собой свойство узла Document. Оно содержит узел Element, представляющий корневой элемент XML-документа – в нашем примере, BOOK.
Примечание. Свойство documentElement является одним из специфических для конкретного узла свойств, предоставляемых узлом типа Document. В таблице 9.3 представлены другие полезные свойства, а также методы, относящиеся к узлу Document. Имейте в виду, что для узла Document вы можете использовать и общие свойства узлов, представленные в таблице 9.2.
-
childNodes является свойством узла Element для корневого элемента. Оно содержит множество всех дочерних узлов корневого узла Element, не являющихся атрибутами. В нашем примере оно содержит узлы Element для пяти дочерних XML-элементов: TITLE, AUTHOR, BINDING, PAGES и PRICE. Выражение childNodes(0) ссылается на первый из этих дочерних узлов (а именно, на элемент TITLE ).
Примечание. В рассматриваемом примере страницы (Листинг 9.3) вы можете использовать выражение Document.childNodes(2), чтобы получить доступ к узлу корневого элемента. (Выражение Document.childNodes(0) относится к узлу XML-объявления, а выражение Document.childNodes(1) относится к узлу комментария.) Однако преимущество использования свойства documentElement узла Document заключается в том, что его значение не зависит от положения корневого элемента внутри XML-документа. Например, если бы вы удалили комментарий в начале документа, либо если бы добавили объявление типа документа, выражение Document.childNodes(2) больше не представляло бы корневой элемент.
-
text является свойством узла, возвращаемого выражением childNodes(0). Оно предоставляет весь текст, содержащийся в этом узле, а также текст, принадлежащий любому подчиненному узлу Element. В нашем примере TITLE не имеет подчиненных элементов, поэтому свойство text содержит только собственно текст элемента TITLE, "The Adventures of Huckleberry Finn".
Примечание. Свойства childNodes и text относятся к общим свойствам узлов (см. таблицу 9.2).