Просмотр содержимого записной книжки

Просмотр содержимого записной книжки

Для того чтобы использовать схему XML DOM в сценарии SortNameMSXML.js, осуществляющем вывод информации из XML-файла book.xml в Блокнот, нужно внести изменения в три функции: GetTagVal(obj, tgName), PersonToArray(XNode) и FileToArray(). Сценарий, который получится в результате этих изменений, назовем SortNameXMLDOM.js.

В функции FileToArray() сначала создается пустой массив PersonArr и экземпляр XML объекта DOMDocument:

PersonArr=new Array();

XML = WScript.CreateObject("Msxml.DOMDocument");

Для загрузки содержимого файла book.xml (путь к этому файлу хранится в переменной PathBook) в объект xml, используется метод load:

XML.load(PathBook);

Указатель на корневой элемент записывается в переменную Root с помощью свойства documentElement объекта XML:

Root=XML.documentElement;

После этого нам остается в цикле перебрать все элементы Person (для корневого элемента они являются дочерними элементами первого уровня вложенности) и для каждого из них вызвать функцию PersonToArray():

for (i=1; i<=Root.childNodes.length-1; i++) {

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

 //первого уровня вложенности

 CurrNode=Root.childNodes.item(i);

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

 PersonToArray(CurrNode);

}

Функция PersonToArray(XNode) в SortNameXMLDOM.js имеет тот же вид, что и в сценарии SortNameMSXML.js:

function PersonToArray(XNode) {

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

 PersonRec=new Person();

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

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

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

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

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

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

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

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

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

 PersonArr[PersonArr.length]=PersonRec;

}

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

function GetTagVal(obj, tgName) {

 var ElemList;

 //Создаем коллекцию дочерних для obj элементов, которые

 //задаются тегом tgName

 ElemList=obj.getElementsByTagName(tgName);

 //Проверяем, есть ли в коллекции ElemList элементы

 if (ElemList.length>0)

  //Возвращаем значение первого встретившегося элемента tgName

  return ElemList.item(0).text

 else return "";

}

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

Листинг 6.4. Чтение данных из XML-файла с помощью XML DOM

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

/* Имя: SortNameXMLDOM.js                                          */

/* Язык: JScript                                                   */

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

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

/*           помощью объектной модели XML DOM                      */

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

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

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) {

 var ElemList;

 //Создаем коллекцию дочерних для obj элементов, которые

 //задаются тегом tgName

 ElemList=obj.getElementsByTagName(tgName);

 //Проверяем, есть ли в коллекции ElemList элементы

 if (ElemList.length>0)

  //Возвращаем значение первого встретившегося элемента tgName

  return ElemList.item(0).text

 else return "";

}

//Заполнение нового элемента массива

function PersonToArray(XNode) {

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

 PersonRec=new Person();

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

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

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

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

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

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

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

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

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

 PersonArr[PersonArr.length]=PersonRec;

}

//Создание массива объектов Person

function FileToArray() {

 var XML,Root,NomRec,CurrNode,ex,i;

 //Создаем массив PersonArr

 PersonArr=new Array();

 //Создаем объект XML DOM

 XML = WScript.CreateObject("Msxml.DOMDocument");

 //Загружаем XML-документ из файла

 XML.load(PathBook);

 //Сохраняем в переменной Root ссылку на корневой элемент документа

 Root=XML.documentElement;

 //Перебираем все дочерние элементы первого уровня вложенности

 //для корневого элемента

 for (i=1; i<=Root.childNodes.length-1;i++) {

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

  CurrNode=Root.childNodes.item(i);

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

  PersonToArray(CurrNode);

 }

}

//Запись в выходной файл заголовка отчета

function TopReport(Mess) {

 FOut.WriteLine(Mess);

 FOut.WriteLine("--------------------");

 FOut.WriteLine("");

}

//Запись в выходной файл итоговой информации

function BottomReport(Mess) {

 FOut.WriteLine(Mess);

}

//Запись данных из объекта Person в выходной файл

function PrintPerson(PersRec) {

 FOut.WriteLine("Фамилия: "+PersRec.LastName);

 FOut.WriteLine("Имя: "+PersRec.Name);

 FOut.WriteLine("Телефон: "+PersRec.Phone);

 FOut.WriteLine("Улица: "+PersRec.Street);

 FOut.WriteLine("Дом: "+PersRec.House);

 FOut.WriteLine("Кв.: "+PersRec.App);

 FOut.WriteLine("Заметки: "+PersRec.Note);

 FOut.WriteLine("*********************************");

 NomRec++;

}

//Сортировка массива и вывод его содержимого в выходной файл

function ListPersonArray() {

 var i;

 //Сортировка массива по фамилии

 PersonArr.sort(SortLastName);

 //Цикл по всем элементам массива PersonArr

 for (i=0;i<=PersonArr.length-1;i++) {

  //Запись информации в выходной файл

  PrintPerson(PersonArr[i]);

 }

}

//Функция для сортировки массива по фамилии

function SortLastName(Pers1,Pers2) {

 if (Pers1.LastName<Pers2.LastName) return -1;

 else if (Pers1.LastName==Pers2.LastName) return 0;

 else return 1;

}

//Вывод содержимого файла с данными

function ListFile() {

 //Считывание данных из файла в массив

 FileToArray();

 //Запись информации из массива в выходной файл

 ListPersonArray();

}

//Просмотр содержимого выходного файла в Блокноте

function MakeOut() {

 //Закрываем выходной файл

 FOut.Close();

 //Открываем выходной файл в Блокноте

 WshShell.Run("notepad "+PathOut,1);

}

//Построение путей к файлам

function InitPath() {

 BasePath=WshShell.CurrentDirectory+"\";

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

 PathBook=BasePath+"book.xml",

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

 PathOut=BasePath+"out.txt";

}

//Основная запускная функция

function Main() {

 //Создаем объект WshShell

 WshShell = WScript.CreateObject("WScript.Shell");

 //Определяем пути к файлам

 InitPath();

 //Создаем объект FileSystemObject

 FSO=WScript.CreateObject("Scripting.FileSystemObject");

 //Открываем выходной файл для записи

 FOut=FSO.OpenTextFile(PathOut,ForWriting,true);

 //Печатаем заголовок отчета

 TopReport("Сортировка по фамилии");

 //Выводим содержимого файла с данными

 ListFile();

 //Печатаем итоговую информацию

 BottomReport("Всего записей: "+PersonArr.length);

 //Открываем выходной файл в Блокноте

 MakeOut();

}

/*******************  Начало  **********************************/

Main();

/*************  Конец *********************************************/

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Модели содержимого

Из книги автора

Модели содержимого Предыдущие спецификации разметки разделяли элементы на строчные и блочные. HTML5 использует более тонкий подход, разделяя элементы на более широкий спектр категорий.Строчные элементы теперь имеют модель содержимого «семантики на уровне текста».


5.1. Просмотр содержимого каталога

Из книги автора

5.1. Просмотр содержимого каталога Все Unix-системы, включая Linux, используют для хранения файловой информации на диске один и тот же концептуальный дизайн. Хотя в реализации дизайна есть значительные вариации, интерфейс на уровне С остается постоянным, давая возможность


Удаление содержимого

Из книги автора

Удаление содержимого Если ваше правило для узла не работает, то есть оно пусто, содержимое выбранного узла не будет скопировано в выходной документ. Таким способом при создании выходного документа можно выборочно удалять содержимое из исходного документа.Предположим,


26.2.1. Создание содержимого

Из книги автора

26.2.1. Создание содержимого popt может чередовать синтаксический анализ нескольких совокупностей командных строк. Для этого она сохраняет всю информацию о состоянии для определенной совокупности аргументов командных строк в структуре данных poptContext непрозрачного типа,


Разработка записной книжки в формате текстового файла

Из книги автора

Разработка записной книжки в формате текстового файла Последний пример, который мы рассмотрим в этой главе, посвящен обработке данных, хранящихся в текстовом файле с разделителями (это может быть, например, выборка из электронной таблицы, базы данных и т.п.).Предположим,


Однозадачный сценарий для работы с записной книжкой

Из книги автора

Однозадачный сценарий для работы с записной книжкой Как мы видим из вышеприведенных примеров, ни объектная модель WSH, ни языки JScript и VBScript не предоставляют средств для создания полноценного графического интерфейса пользователя.Тем не менее, такой интерфейс в сценариях WSH


Вывод данных из записной книжки в документ Microsoft Word

Из книги автора

Вывод данных из записной книжки в документ Microsoft Word В качестве примера взаимодействия WSH с Microsoft Word мы рассмотрим два сценария, которые будут создавать документы Word и выводить туда информацию из записной книжки в XML-формате, которая хранится в файле book.xml. Рис. 8.4. Вывод


Вывод данных из записной книжки в таблицу Microsoft Excel

Из книги автора

Вывод данных из записной книжки в таблицу Microsoft Excel Напишем сценарий, который будет создавать файл (рабочую книгу) Microsoft Excel и заносить туда данные из записной книжки (рис. 8.10). Рис. 8.10. Рабочая книга Microsoft Excel с данными из файла book.xmlДля того чтобы использовать определенные в


Реализация генерируемого содержимого

Из книги автора

Реализация генерируемого содержимого Давайте реализуем генерируемое содержимое на нашем Web-сайте. Мы создадим базу данных, содержащую список всех Web-страниц (файлов с подгружаемым содержимым) с названиями и гиперссылками.— На основе этой базы данных мы будем


Просмотр содержимого файла robots.txt

Из книги автора

Просмотр содержимого файла robots.txt Для просмотра содержимого этого файла мы рекомендуем воспользоваться скриптом, созданным Сергеем Матвеенко – специалистом по IT из Санкт-Петербурга.Скрипт доступен по адресу: http://serge.matveenko.ru/robotstxt/.Вот что пишет о нем сам автор. Кнопка на


Обзор содержимого книги

Из книги автора

Обзор содержимого книги Книга Язык программирования C# 2005 и платформа .NET 2.0, 3-е издание делится на пять логически обособленных разделов, каждый из которых состоит из глав, тем или иным образом связанных между собой. Если вы имели возможность ознакомиться с одним из


Просмотр и поиск содержимого

Из книги автора

Просмотр и поиск содержимого Для просмотра элементов содержимого, находящихся в текущем источнике, служит зона содержимого, или палитра, – средство AutoCAD, предназначенное для просмотра содержимого открытых рисунков и других источников, а также образцов и описаний перед


7.6.1. Просмотр содержимого каталога

Из книги автора

7.6.1. Просмотр содержимого каталога Итак, начнем обзор нашей файловой системы. Откройте окно Мой компьютер (рис. 51) — вы увидите список дисков. Если щелкнуть на произвольном диске один раз, то слева вы увидите сводную информацию о диске — тип файловой системы, полный объем