| Возвращает указатель на родительский элемент. Ссылки на родительский элемент имеют все элементы, за исключением корневого | |
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(, в которой создается новый экземпляр 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 (, которая возвращает значение дочернего для элемента objtgName
function GetTagVal(obj, tgName) {
//Возвращаем значение тега tgName
return obj.Children.Item(tgName,0).Text;
}
В листинге 6.3 приводится полный текст сценария SortNameMSXMLjs.
/*******************************************************************/
/* Имя: 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; //Телефон
