Выбрать главу

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

При рассмотрении объектной модели 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: