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 вместе со всеми его дочерними элементами

   Root.removeChild(Parent);

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

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

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

  }

  //Сохраняем содержимое XML-файла на диске

  XMLDoc.save(PathBook);

 }

}

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

function InitPath() {

 BasePath=WshShell.CurrentDirectory+'\';

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

 PathBook=BasePath+'book.xml';

}

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

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату