Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Доступ и отображение элементов XML-документа



Рассмотрим основные приемы использования HTML-страницы и DOM для отображения элементов XML-документа. Эти приёмы демонстрируются в файлах Book . xml и DomDemo_Fixed.htm.

Содержание файла Book . xml:

 

<?xml version="1.0"?>

<!-- Имя файла: 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>

   

 

Содержание файла DomDemo_Fixed.htm:

 

<!-- Имя файла: 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>

   

 

Файл Book . xml  содержит простой XML-документ, который описывает одну книгу. Его корневой элемент, BOOK, содержит пять дочерних элементов (TITLE , AUTHOR , BINDING , PAGES и PRICE), каждый из которых содержит символьные данные, описывающие характеристики книги.

Файл DomDemo_Fixed.htm содержит HTML-страницу, которая отображает содержимое каждого из дочерних элементов в XML-документе. На рисунке 4.2 показано как эта страница выглядит в Internet Explorer.

 

 

Рис. 4.2 – Отображение файла DomDemo_Fixed.htm 

 

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.

 

Сценарий первым делом получает узел 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. В таблице 4.3 представлены другие полезные свойства, а также методы, относящиеся к узлу Document. Для узла Document можно использовать и общие свойства узлов, представленные в таблице 4.2.

childNodes является свойством узла Element для корневого элемента. Оно содержит множество всех дочерних узлов корневого узла Element, не являющихся атрибутами. В нашем примере оно содержит узлы Element для пяти дочерних XML-элементов: TITLE , AUTHOR , BINDING , PAGES и PRICE. Выражение childNodes(0) ссылается на первый из этих дочерних узлов (а именно, на элемент TITLE).

Примечание. В рассматриваемом примере страницы  файла DomDemo_Fixed.htm можно использовать выражение 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  относятся к общим свойствам узлов (см. таблицу 4.2).

 

Таблица 4.3. Полезные свойства и методы, предоставляемые узлами Document. Общие свойства приведены в таблице 4.2

 

Свойство узла Document Описание Пример
1 2 3
Doctype Узел DocumentType, представляющий объявление типа документа DocumentType = Document.doctype;
documentElement Узел Element, представляющий корневой элемент RootElement = Document.documentElement;

 

1 2 3
ondataavailable Если вы присвоите этому свойству имя функции, которую вы написали, функция будет вызываться в момент доступности данных XML Document.ondataavailable = MyDataAvailableHandler; (Функция MyDataAvailableHandler будет вызываться, когда станут доступными данные XML)
onreadystatechange Если вы присвоите этому свойству имя функции, которую вы написали, функция будет вызываться всякий раз, когда изменяется свойство readyState узла Document. (Об этом свойстве см. далее в этой таблице) Document.onreadystatechange = MyReadyStateHandler; (Функция MyReadyStateHandler будет вызываться всякий раз при изменении свойства readyState узла Document)
parseError Объект, который содержит информацию о любых ошибках, которые возникают в процессе обработки документа ErrorCode = Document.parseError.errorCode;
readyState Текущий статус загрузки и обработки XML-документа. Может принимать одно из следующих числовых значений: 0: не инициализирован 1: загружается 2: загружен 3: интерактивный режим 4: завершение if (Document.readyState == 4)  /* обработка данных… */
url URL XML-документа URL = Document.url;
getElementsByTagName (type-name) Возвращает множество NodeList всех элементов в документе, которые имеют заданное имя типа. Если указано "*", возвращает все элементы AuthorElementCollection = Document.getElementsByTagName ("AUTHOR");
NodeFromID (id-value) Возвращает узел, представляющий элемент, чей атрибут типа ID имеет указанное значение. Element = Document.nodeFromID ("S021");

 

Символьные данные элемента TITLE, которые получены из выражения справа от знака равенства ("The Adventures of Huckleberry Finn") присваиваются свойству innerText HTML-элемента SPAN, имеющему идентификатор title:

 

title.innerText= Document.documentElement.childNodes(0).text;

Этот элемент SPAN определен внутри элемента BODY HTML-страницы следующим образом:

 

<SPAN ID="title" STYLE="font-weight:bold"></SPAN>

 

Присвоение символьных данных свойству innerText элемента SPAN приводит к тому, что элемент SPAN отображает текст с использованием формата, определенного в его начальном теге (font-weight:bold).

 

Подсказка. В Dynamic HTML (DHTML), который поддерживает Internet Explorer, каждый HTML-элемент имеет набор свойств, которые вы можете использовать для установки или получения различных характеристик элемента через код сценария. Свойство innerText устанавливает или получает текстовое содержимое элемента. Подробную информацию о работе с HTML и DHTML в Internet Explorer вы можете найти на Web-сайте, предоставленном MSDN:http://msdn.microsoft.com/workshop/author/default.asp.

 

4.3 Использование объекта NodeList

Свойство childNodes узла содержит набор дочерних узлов текущего узла, не являющихся атрибутами. Доступ к дочерним узлам-атрибутам осуществляется через свойство attribute узла. Определенный тип набора, который содержит свойство childNodes , носит название объекта NodeList.

Чтобы извлечь определенный дочерний узел из объекта NodeList, вы можете обратиться к его методу item, указав при этом индекс дочернего узла, который вы хотите получить (индексы отсчитываются с нуля). Например, обращение к следующему методу позволяет получить первый дочерний узел, принадлежащий узлу Element:

 

FirstNode = Element.childNodes.item(0);

 

Однако, поскольку item является методом по умолчанию объекта NodeList, вы можете опустить его:

 

FirstNode = Element.childNodes(0);

 

В таблице 4.4 представлены свойства и методы, предоставляемые объектом NodeList.

 

Таблица 4.4. Свойство и методы, поддерживаемые групповым

 объектом NodeLi st

 

Свойство NodeList Описание Пример
1 2 3
length Количество узлов, содержащихся в наборе NodeCount = Element.childNodes.length;
item   (индекс, отсчитываемый с 0) (метод по умолчанию) Возвращает узел в соответствии с заданным вами индексом, при этом 0 соответствует первому узлу SecondChild = Element.childNodes.item (1); или   SecondChild = Element.childNodes (1);

 

1 2 3
reset() Устанавливает внутренний указатель на позицию перед первым узлом в наборе, чтобы последующий вызов nextNode возвращал первый узел Element.childNodes.reset ();
nextNode() Возвращает следующий узел в наборе в соответствии с позицией внутреннего указателя Element.childNodes.reset (); FirstNode = Element.childNodes.nextNode();

 

Доступ к объекту NodeList осуществляется через свойство childNodes узла.

 


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 257; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.026 с.)
Главная | Случайная страница | Обратная связь