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.
<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';
}
//Основная запускная функция