Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программное обеспечение » Windows Script Host для Windows 2000/XP - Андрей Попов

Windows Script Host для Windows 2000/XP - Андрей Попов

Читать онлайн Windows Script Host для Windows 2000/XP - Андрей Попов

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 89 90 91 92 93 94 95 96 97 ... 175
Перейти на страницу:

   "добавлена в файл "+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():

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

 //Определяем родительский элемент (Person) для найденного

 //элемента LastName

В Parent=NodeList.item(i).parentNode;

 //Удаляем элемент Person вместе со всеми его дочерними элементами

В Root.removeChild(Parent);

 //Выводим диалоговое окно с сообщением

 WshShell.Popup("Запись удалена!",0,

  "Работа с XML-файлом",vbInformation+vbOkOnly);

}

После удаления всех записей содержимое XML-файла book.xml сохраняется на диске с помощью метода save():

XMLDoc.save(PathBook);

Полный текст сценария FindAndDelRecord.wsf приводится в листинге 6.6.

Листинг 6.6. Поиск и удаление данных в XML-файле с помощью XML DOM

<job id="PhoneBook">

<runtime>

<description>

РРјСЏ: FindAndDelRecord.wsf

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

          Поиск и удаление элементов из XML-файла

</description>

</runtime>

<script language="VBScript">

 'Функция возвращает фамилию для удаления

В Function InputName

 'Вводим фамилию в диалоговом окне

 InputName = InputBox("Введите фамилию для удаления:", "Записная книжка")

В End Function

</script>

<script language="JScript">

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

var

В WshShell,

 LastName,  //Удаляемая фамилия

 BasePath,  //Путь к текущему каталогу

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

 XMLDoc,    //XML-файл с данными

 NomRec=0,  //Счетчик количества записей

 PersonRec, //Объект для хранения данных об одном человеке

 PersonArr; //Массив для хранения объектов PersonRec

//Рнициализируем константы для диалоговых РѕРєРѕРЅ

var vbYesNo=4,vbQuestion=32,vbInformation=64,vbYes=6,vbOkOnly=0;

//Поиск фамилии в записной книжке и удаление всех

//реквизитов, относящихся к этой фамилии

function FindAndDelRecord() {

В var Root,sSelect,i,Parent,NodeList;

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

В XMLDoc = WScript.CreateObject("Msxml.DOMDocument");

 //Загружаем XML-файл

В XMLDoc.load(PathBook);

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

 //документа

В Root=XMLDoc.documentElement;

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

В sSelect="Person/LastName[text()='"+LastName+"']";

 //Создаем коллекцию NodeList всех элементов LastName,

 //значение которых совпадает со значением переменной LastName

В NodeList=XMLDoc.documentElement.selectNodes(sSelect);

 if (NodeList.length==0) //Коллекция NodeList пуста

  //Выводим диалоговое окно с сообщением

  WshShell.Popup("Фамилия "+LastName+

   " не найдена в записной книжке!",0,

   "Работа с XML-файлом",vbInformation+vbOkOnly);

 else { //Требуемая фамилия найдена

  //Цикл по всем найденным элементам LastName

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

   //Определяем родительский элемент (Person) для найденного

   //элемента LastName

В В  Parent=NodeList.item(i).parentNode;

   //Удаляем элемент Person вместе со всеми его дочерними элементами

1 ... 89 90 91 92 93 94 95 96 97 ... 175
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Windows Script Host для Windows 2000/XP - Андрей Попов.
Комментарии