Книга: Windows Script Host для Windows 2000/XP

Добавление информации в записную книжку

Добавление информации в записную книжку

В принципе можно добавлять информацию в записную книжку, просто записывая строки с соответствующими тегами в текстовый файл book.xml. Однако лучше для этой цели воспользоваться специальными методами XML DOM (в этом случае не нужно, например, заботиться о закрывающих тегах).

Для иллюстрации методов XML DOM, позволяющих записывать данные в XML-файл, рассмотрим сценарий AddRecord.js, в котором производится добавление в book.xml следующей записи:

<Person>
 <LastName>Сидоров</LastName>
 <Name>Aнтон</Name>
 <Phone>18-18-18</Phone>
 <Strееt>Саранская</Street>
 <House>12</House>
 <App>4</App>
 <Note>Запись добавлена из сценария</Note>
</Person>

Процесс добавления записи в книжку осуществляется в функции AddRecord(). Здесь сначала заполняются нужными значениями поля объекта PersonRec (функция MakePersonRec()), а затем данные из PersonRec добавляются в файл book.xml (функция RecordToFile(PersonRec)):

function AddRecord() {
 //Заполняем поля объекта PersonRec
 MakePersonRec();
 //Сохраняем данные из объекта PersonRec в XML-файле
 RecordToFile(PersonRec);
}

Итак, наиболее важной в сценарии является функция RecordToFile(PersonRec). В этой функции сначала создается экземпляр XMLDoc объекта DOMDocument и с помощью метода load загружается файл book.xml:

XMLDoc = WScript.CreateObject("Msxml.DOMDocument");
XMLDoc.load(PathBook);

Указатель на корневой элемент сохраняется в переменной Root:

Root=XMLDoc.documentElement;

После этого с помощью метода createElement создается новый элемент Person, который затем добавляется в book.xml (метод appendChild):

//Создаем XML-элемент Person
NewElem=XMLDoc.createElement("Person");
//Добавляем новый элемент в XML-файл
Root.appendChild(NewElem);

Другие добавляемые элементы (LastName, Name, Phone, Street, House, App и Note) должны быть дочерними относительно элемента Person, поэтому в переменной Root мы сохраним ссылку на последний добавленный элемент Person:

Root=Root.lastChild;

Все элементы добавляются с помощью вызовов методов createElement и appendChild, например:

//Создаем элемент LastName
NewElem=XMLDoc.createElement("LastName");
//Добавляем новый элемент в XML-файл (внутри элемента Person)
Root.appendChild(NewElem);

Содержимое добавляемых элементов (свойство text) берется из соответствующих полей объекта PersRec, например:

//Подставляем в качестве содержимого элемента LastName
//значение поля LastName объекта PersRec
Root.lastChild.text=PersRec.LastName;

После того как все нужные элементы добавлены, измененный файл book.xml с помощью метода save сохраняется на жестком диске:

XMLDoc.save(PathBook);

Полный текст сценария AddRecord.js приводится в листинге 6.5.

Листинг 6.5. Добавление данных в XML-файл с помощью XML DOM

/*******************************************************************/
/* Имя: AddRecord.js                                               */
/* Язык: JScript                                                   */
/* Описание: Записная книжка (данные в XML-файле book.xml).        */
/*           Вставка новых элементов в XML-файл                    */
/*******************************************************************/
//Объявляем переменные
var
 WshShell,
 BasePath,  //Путь к текущему каталогу
 PathBook,  //Путь к файлу с данными
 XMLDoc,    //XML-файл с данными
 NomRec=0,  //Счетчик количества записей
 PersonRec, //Объект для хранения данных об одном человеке
 PersonArr; //Массив для хранения объектов PersonRec
//Инициализируем константы для диалоговых окон
var vbYesNo=4,vbQuestion=32,vbInformation=64,vbYes=6,vbOkOnly=0;
//Конструктор объекта 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;         //Примечание
}
//Заполнение полей объекта PersonRec
function MakePersonRec() {
 //Создаем экземпляр PersonRec объекта Person
 PersonRec=new Person();
 //Заполняем поля объекта PersonRec
 PersonRec.LastName="Сидоров";
 PersonRec.Name="Антон";
 PersonRec.Phone="18-18-18";
 PersonRec.Street="Саранская";
 PersonRec.House="12";
 PersonRec.App="4";
 PersonRec.Note="Запись добавлена из сценария";
}
//Сохранение данных из объекта PersonRec в XML-файле
function RecordToFile(PersRec) {
 //Объявляем переменные
 var Root,NewElem,s;
 //Создаем объект DOMDocument
 XMLDoc = WScript.CreateObject("Msxml.DOMDocument");
 //Загружаем XML-файл
 XMLDoc.load(PathBook);
 //Сохраняем в переменной Root ссылку на корневой элемент
 //документа
 Root=XMLDoc.documentElement;
 //Создаем XML-элемент Person
 NewElem=XMLDoc.createElement("Person");
 //Добавляем новый элемент в XML-файл
 Root.appendChild(NewElem);
 //Сохраняем в переменной Root ссылку на последний добавленный
 //элемент Person
 Root=Root.lastChild;
 //Создаем элемент LastName
 NewElem=XMLDoc.createElement("LastName");
 //Добавляем новый элемент в XML-файл (внутри элемента Person)
 Root.appendChild(NewElem);
 //Подставляем в качестве содержимого элемента LastName
 //значение поля LastName объекта PersRec
 Root.lastChild.text=PersRec.LastName;
 //Создаем элемент Name
 NewElem=XMLDoc.createElement("Name");
 //Добавляем новый элемент в XML-файл (внутри элемента Person)
 Root.appendChild(NewElem);
 //Подставляем в качестве содержимого элемента Name
 //значение поля Name объекта PersRec
 Root.lastChild.text=PersRec.Name;
 //Создаем элемент Phone
 NewElem=XMLDoc.createElement("Phone");
 //Добавляем новый элемент в XML-файл (внутри элемента Person)
 Root.appendChild(NewElem);
 //Подставляем в качестве содержимого элемента Phone
 //значение поля Phone объекта PersRec
 Root.lastChild.text=PersRec.Phone;
 //Создаем элемент Street
 NewElem=XMLDoc.createElement("Street");
 //Добавляем новый элемент в XML-файл (внутри элемента Person)
 Root.appendChild(NewElem);
 //Подставляем в качестве содержимого элемента Street
 //значение поля Street объекта PersRec
 Root.lastChild.text=PersRec.Street;
 //Создаем элемент House
 NewElem=XMLDoc.createElement("House");
 //Добавляем новый элемент в XML-файл (внутри элемента Person)
 Root.appendChild(NewElem);
 //Подставляем в качестве содержимого элемента House
 //значение поля House объекта PersRec
 Root.lastChild.text=PersRec.House;
 //Создаем элемент App
 NewElem=XMLDoc.createElement("App");
 //Добавляем новый элемент в XML-файл (внутри элемента Person)
 Root.appendChild(NewElem);
 //Подставляем в качестве содержимого элемента App
 //значение поля House объекта PersRec
 Root.lastChild.text=PersRec.App;
 //Создаем элемент Note
 NewElem=XMLDoc.createElement("Note");
 //Добавляем новый элемент в XML-файл (внутри элемента Person)
 Root.appendChild(NewElem);
 //Подставляем в качестве содержимого элемента App
 //значение поля House объекта PersRec
 Root.lastChild.text=PersRec.Note;
 //Сохраняем содержимое XML-файла на диске
 XMLDoc.save(PathBook);
}
//Добавление новой записи в книжку
function AddRecord() {
 //Заполняем поля объекта PersonRec
 MakePersonRec();
 //Сохраняем данные из объекта PersonRec в XML-файл
 RecordToFile(PersonRec);
}
//Построение путей к файлам
function InitPath() {
 BasePath=WshShell.CurrentDirectory+"";
 //Путь к файлу с данными
 PathBook=BasePath+"book.xml";
}
//Основная запускная функция
function Main() {
 var Res;
 //Создаем объект WshShell
 WshShell = WScript.CreateObject("WScript.Shell");
 //Определяем пути к файлам
 InitPath();
 //Запрос на создание нового ключа
 Res=WshShell.Popup("Добавить запись в n"+PathBook+"?", 0,
  "Работа с XML-файлом", vbQuestion+vbYesNo);
 if (Res==vbYes) { //Нажата кнопка Да
  //Добавляем новую запись в книжку
  AddRecord();
  //Выводим информацию на экран
  WshShell.Popup("Новая записьnn"+PersonRec.LastName+" "+
   PersonRec.Name+"n"+PersonRec.Phone+"n"+
   PersonRec.Street+", "+PersonRec.House+"-"+PersonRec.App+"nn"+
   "добавлена в файл "+PathBook, 0,
   "Работа с XML-файлом", vbInformation+vbOkOnly);
 }
}
/*******************  Начало  **********************************/
Main();
/*************  Конец *********************************************/
 

Оглавление книги


Генерация: 1.323. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз