XMLDocument.removechild чяднт?

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

XMLDocument.removechild чяднт?

Сообщение nds » 17.09.2013 19:17:16

Код: Выделить всё
var
fb2: TXMLDocument;
   il:TDOMNodeList;
////вырезан кусок не имеющий отношения к проблеме//////     
il:=fb2.GetElementsByTagName('binary');
for i:=1 to il.Count do
il.Item[i].ParentNode.RemoveChild(il.Item[i]);

вылетает на последней строчке с ошибкой "External:SIGSEGV"
nds
незнакомец
 
Сообщения: 2
Зарегистрирован: 17.09.2013 19:09:09

Re: XMLDocument.removechild чяднт?

Сообщение Sergei I. Gorelkin » 17.09.2013 20:15:45

Используешь цикл for для итерации по TDOMNodeList с модификацией документа.
GetElementsByTagName возвращает список, отражающий текущее состояние документа, а цикл for вычисляет кол-во итераций один раз в начале, поэтому по мере удаления узлов происходит выход за пределы списка. Не говоря о том, что на каждой итерации список перестраивается с повторным поиском всех элементов по имени...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: XMLDocument.removechild чяднт?

Сообщение nds » 17.09.2013 21:50:09

Sergei I. Gorelkin писал(а):Не говоря о том, что на каждой итерации список перестраивается с повторным поиском всех элементов по имени...

чудны извращения мысли программистов lcl
nds
незнакомец
 
Сообщения: 2
Зарегистрирован: 17.09.2013 19:09:09

Re: XMLDocument.removechild чяднт?

Сообщение Иван Шихалев » 11.10.2013 05:04:31

Извращения-то тут откуда? Такое поведение определено в стандартах DOM.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: XMLDocument.removechild чяднт?

Сообщение vada » 11.10.2013 13:36:30

Код: Выделить всё
for i:=1 to il.Count do
il.Item[i].ParentNode.RemoveChild(il.Item[i]);

Нууу... Так нельзя. Полюбасу грабли будут. Если есть желание в цикле элементы поудалять, так надо цикл в обратную сторону запускать downto, типа.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

Рейтинг@Mail.ru