Андрей Попов - Windows Script Host для Windows 2000/XP
Таблица 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
В 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; //Константа для создания выходного файла
//Конструктор объекта Person
function Person(LastName,Name,Phone,Street,House,App,Note) {
 this.LastName=LastName; //Фамилия
В this.Name=Name;В В В В В В В В //РРјСЏ
 this.Phone=Phone;      //Телефон
 this.Street=Street;    //Улица
 this.House=House;      //Дом
 this.App=App;          //Квартира
 this.Note=Note;        //Примечание
}
//Определение значения тега tgName XML-элемента obj
function GetTagVal(obj, tgName) {
 //Возвращаем значение тега tgName
В return obj.Children.Item(tgName,0).Text;
}
//Заполнение нового элемента массива
function PersonToArray(XItem) {
 //Создаем новый экземпляр PersonRec объекта Person