Попов Андрей Викторович
Шрифт:
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("Новая запись\n\n"+PersonRec.LastName+" "+
PersonRec.Name+"\n"+PersonRec.Phone+"\n"+
PersonRec.Street+", "+PersonRec.House+"-"+PersonRec.App+"\n\n"+
"добавлена в файл "+PathBook, 0,
"Работа с XML-файлом", vbInformation+vbOkOnly);
}
}
/******************* Начало **********************************/
Main;
/************* Конец *********************************************/
Поиск и удаление записи из книжки
Рассмотрим сценарий FindAndDelRecord.wsf, с помощью которого можно будет полностью удалить из записной книжки данные о человеке, фамилия которого введена в диалоговом окне (рис. 6.1).
Рис. 6.1. Ввод фамилии для удаления
Сценарий FindAndDelRecord.wsf реализован в виде WS-файла для того, чтобы можно было внутри JScript-кода воспользоваться функцией
InputName
на языке VBScript, которая реализует диалоговое окно с полем ввода, показанное на рис. 6.1: Function InputName
'Вводим фамилию в диалоговом окне
InputName = InputBox("Введите фамилию для удаления:", "Записная книжка")
End Function
Фамилия, которую следует найти и удалить в записной книжке, сохраняется в глобальной переменной
LastName
: LastName=InputName;
Непосредственно поиск и удаление данных производятся в функции
FindAndDelRecord
. Здесь, как и во всех рассмотренных ранее примерах, сначала создается экземпляр XMLDoc
объекта DOMDocument
, с помощью метода load
загружается файл book.xml и указатель на корневой элемент сохраняется в переменной Root
: XMLDoc = WScript.CreateObject("Msxml.DOMDocument");
XMLDoc.load(PathBook);
Root=XMLDoc.documentElement;
Для выделения в записной книжке всех фамилий, которые требуется удалить, используется метод
selectNodes
. В качестве аргумента этого метода подставляется строка sSelect
, которая указывает, что нужно искать расположенные внутри элементов Person
элементы с именем LastName
и значением, которое совпадает со значением переменной LastName
. Все найденные элементы помещаются в коллекцию NodeList
: //Формируем строку для поиска фамилии
sSelect="Person/LastName[text='"+LastName+"']";
//Создаем коллекцию NodeList всех элементов LastName,
//значение которых совпадает со значением переменной LastName
NodeList=XMLDoc.documentElement.selectNodes(sSelect);
Если найден хотя бы один подходящий элемент
LastName
, т.е. коллекция NodeList
не является пустой, то для каждого такого элемента в цикле for
определяется родительский элемент (в нашем случае это элемент Person
) и этот элемент вместе со всеми своими дочерними элементами удаляется с помощью метода removeChild
: