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

на главную - закладки

Жанры

Windows Script Host для Windows 2000/XP

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

Шрифт:

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

С помощью приведенного ниже сценария 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

 PersonRec=new Person;

 //Заполняем
поля объекта PersonRec

 PersonRec.LastName=GetTagVal(XItem,"LastName");

 PersonRec.Name=GetTagVal(XItem,"Name");

 PersonRec.Phone=GetTagVal(XItem,"Phone");

 PersonRec.Street=GetTagVal(XItem,"Street");

 PersonRec.House=GetTagVal(XItem,"House");

 PersonRec.App=GetTagVal(XItem,"App");

 PersonRec.Note=GetTagVal(XItem,"Note");

 //Сохраняем объект PersonRec в массиве

 PersonArr[PersonArr.length]=PersonRec;

}

Поля объекта

PersonRec
заполняются с помощью функции
GetTagVal(obj, tgName)
, которая возвращает значение дочернего для элемента
obj
элемента с именем
tgName
:

function GetTagVal(obj, tgName) {

 //Возвращаем значение тега tgName

 return obj.Children.Item(tgName,0).Text;

}

В листинге 6.3 приводится полный текст сценария SortNameMSXMLjs. 

Листинг 6.3. Чтение данных из XML-файла с помощью объектной модели Internet Explorer 4.0

/*******************************************************************/

/* Имя: SortNameMSXML.js */

/* Язык: JScript */

/* Описание: Записная книжка (данные в XML-файле book.xml). */

/* Вывод всех записей с сортировкой по фамилии с */

/* помощью объектной модели Internet Explorer 4.0 */

/*******************************************************************/

//Объявляем переменные

var

 WshShell,FSO,

 BasePath, //Путь к текущему каталогу

 PathBook, //Путь к файлу с данными

 PathOut, //Путь к выходному файлу

 FBook, //Файл с данными

 FOut, //Выходной файл

 NomRec=0, //Счетчик количества записей

 PersonRec, //Объект для хранения данных об одном человеке

 PersonArr; //Массив для хранения объектов PersonRec

 ForWriting=2; //Константа для создания выходного файла

Поделиться:
Популярные книги

Тузы за границей

Мартин Джордж Р.Р.
4. Дикие карты
Фантастика:
научная фантастика
7.14
рейтинг книги
Тузы за границей

Контртеррор

Валериев Игорь
6. Ермак
Фантастика:
альтернативная история
5.00
рейтинг книги
Контртеррор

Тишина

Бондарев Юрий Васильевич
Проза:
современная проза
8.40
рейтинг книги
Тишина

Гримуар темного лорда VI

Грехов Тимофей
6. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.20
рейтинг книги
Гримуар темного лорда VI

Башня Миров. Начало пути

Бельский Сергей Фёдорович
Фантастика:
фэнтези
боевая фантастика
4.00
рейтинг книги
Башня Миров. Начало пути

Год Мамонта

Романовский Владимир Дмитриевич
Троецарствие
Фантастика:
фэнтези
альтернативная история
7.17
рейтинг книги
Год Мамонта

Я – Малала

Юсуфзай Малала
Документальная литература:
биографии и мемуары
6.80
рейтинг книги
Я – Малала

Уникумы Вселенной

Иванович Юрий
1. Уникумы Вселенной
Фантастика:
боевая фантастика
космическая фантастика
7.29
рейтинг книги
Уникумы Вселенной

Двое, не считая призраков

Нестерова Наталья Владимировна
Проза:
современная проза
8.41
рейтинг книги
Двое, не считая призраков

Ваше Сиятельство 3

Моури Эрли
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3

Прорицатель

Светлов Роман Викторович
Фантастика:
фэнтези
5.00
рейтинг книги
Прорицатель

Ловите конский топот. Том 1. Исхода нет, есть только выходы...

Звягинцев Василий Дмитриевич
15. Одиссей покидает Итаку
Фантастика:
альтернативная история
8.24
рейтинг книги
Ловите конский топот. Том 1. Исхода нет, есть только выходы...

Иллюстрированная Библия. Ветхий Завет

Коллектив авторов
Религия и эзотерика:
религия
5.00
рейтинг книги
Иллюстрированная Библия. Ветхий Завет

Мелодия души

Бэлоу Мэри
2. Марлоу и Кендрик
Любовные романы:
исторические любовные романы
8.30
рейтинг книги
Мелодия души