Чтение онлайн

ЖАНРЫ

Windows Script Host для Windows 2000/XP

Попов Андрей Викторович

Шрифт:

<App>5</App>

<Note>Без примечаний</Note>

 </Person>

 <Person>

<LastName>Иванов</LastName>

<Name>Иван</Name>

<Phone>17-17-17</Phone>

<Street>Садовая</Street>

<House>4</House>

<App>6</App>

<Note>Очень хороший человек</Note>

 </Person>

 <Person>

<LastName>Казаков</LastName>

<Name>Сергей</Name>

<Phone>24-19-68</Phone>

<Street>Полежаева</Street>

<House>101</House>

<App>22</App>

<Note>Тоже
очень хороший человек</Note>

 </Person>

</PhoneList>
 

Просмотр XML-файла с помощью объектной модели Internet Explorer 4.0

Если требуется только просматривать и анализировать XML-файл, не модифицируя его, то проще всего воспользоваться объектной моделью MSXML, реализованной в Internet Explorer 4.01.

Замечание

Как отмечено в документации MSDN, эта объектная модель является устаревшей и должна быть заменена моделью XML DOM (XML Document Object Model), которая является стандартом корпорации W3C. Однако последняя на момент написания книги версия Internet Explorer 6.0 поддерживает обе эти модели для разбора XML-файлов.

Описание объектной модели

При рассмотрении объектной модели MSXML данные, которые хранятся в XML-файле, удобно представлять в виде иерархического дерева, имеющего один корневой элемент и множество дочерних элементов различного уровня вложенности.

Для анализа содержимого XML-файла используются три объекта:

XML Document
(объект для работы с XML-документом в целом),
XML Element
(отвечает за работу с каждым из элементов XML-файла) и
Element Collection
(коллекция XML-элементов, доступ к которым при помощи метода
item
возможен по имени или порядковому номеру).

Полный набор свойств и методов этих трех объектов мы рассматривать не будем; в табл. 6.2 и 6.3 приведено описание нескольких основных свойств объектов

XML Document
и
XML Element
, некоторые из них понадобятся нам в дальнейшем при составлении сценария на языке JScript для просмотра записной книжки.

Таблица 6.2. Свойства объекта

XML Document

Свойство Описание
URL
Задает или возвращает путь к обрабатываемому документу
root
Содержит корневой элемент XML-документа, Свойство доступно только для чтения
charset
Возвращает или устанавливает название текущей кодировочной таблицы
version
Содержит номер версии XML. Свойство доступно только для чтения

Таблица 6.3. Свойства объекта

XML Element

Свойство Описание
children
Содержит
коллекцию дочерних элементов
tagName
Содержит имя тега. Свойство доступно для чтения и записи
text
Возвращает текстовое содержимое элементов и комментариев
parent
Возвращает указатель на родительский элемент. Ссылки на родительский элемент имеют все элементы, за исключением корневого
type
Возвращает тип элемента: 0 — элемент, 1 — текст, 2 — комментарий, 3 — Document, 4 — DTD

Пример сценария

С помощью приведенного ниже сценария SortNameMSXML.js все записи из book.xml сортируются по фамилии и отображаются в Блокноте. Напомним, что аналогичную задачу для текстового файла с разделителями book.txt реализует сценарий SortName.js, приведенный в листинге 5.21. Алгоритм работы сценария SortNameMSXML.js, как и SortName.js, сводится к следующим основным шагам.

1. Информация из файла book.xml считывается в массив

PersonArr
. Каждый элемент массива является экземпляром объекта
Person
, в котором хранятся все данные для одного человека.

2. Массив

PersonArr
сортируется по возрастанию фамилий.

3. Содержимое всех записей из массива

PersonArr
выводится в текстовый файл out.txt.

4. Файл out.txt открывается в Блокноте.

Таким образом, специфика работы с XML-файлом проявляется лишь при считывании данных из файла book.xml в массив

PersonArr
. Для этого используется функция
FileToArray
. Сначала в этой функции создается пустой массив
PersonArr
и экземпляр
XML
объекта
XML Document
:

PersonArr=new Array;

XML=WScript.CreateObject("MSXML");

В свойство

url
объекта
XML
записывается путь к файлу book.xml, который хранится в переменной
PathBook
:

XML.url=PathBook;

Далее в функции

FileToArray
о определяется количество элементов
<Person>
, т.е. количество записей в книжке (переменная
NomRec
):

NamRec=XML.root.children.item("Person").length;

В цикле

for
происходит перебор всех элементов
<Person>
, которые являются элементами соответствующей коллекции:

//Перебираем коллекцию XML-элементов Person

for (i=0; i<NomRec; i++) {

 //Выделяем в коллекции XML-элементов i-й элемент Person

 XItem=XML.root.children.item("Person", i);

 //Добавляем новый элемент, в массив объектов Person

 PersonToArray(XItem);

}

Как мы видим, каждый элемент

<Person>
передается в качестве аргумента в функцию
PersonToArray(XItem)
, в которой создается новый экземпляр
PersonRec
объекта
Person
, заполняются поля этого объекта и происходит добавление
PersonRec
в массив
PersonArr
:

function PersonToArray(XItem) {

 //Создаем новый экземпляр PersonRec объекта Person

Поделиться с друзьями: