Опубликован: 24.01.2007 | Доступ: свободный | Студентов: 9129 / 1438 | Оценка: 4.28 / 4.09 | Длительность: 20:51:00
Лекция 9:

Отображение 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.


Рис. 9.2.

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).

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

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

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

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

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

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

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

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

Спасибо!

Геннадий Шестаков
Геннадий Шестаков
Беларусь, Орша
Наталья Алмаева
Наталья Алмаева
Россия