XMLDocument.removechild чяднт?
Добавлено:
17.09.2013 19:17:16
nds
- Код: Выделить всё
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"
Re: XMLDocument.removechild чяднт?
Добавлено:
17.09.2013 20:15:45
Sergei I. Gorelkin
Используешь цикл for для итерации по TDOMNodeList с модификацией документа.
GetElementsByTagName возвращает список, отражающий текущее состояние документа, а цикл for вычисляет кол-во итераций один раз в начале, поэтому по мере удаления узлов происходит выход за пределы списка. Не говоря о том, что на каждой итерации список перестраивается с повторным поиском всех элементов по имени...
Re: XMLDocument.removechild чяднт?
Добавлено:
17.09.2013 21:50:09
nds
Sergei I. Gorelkin писал(а):Не говоря о том, что на каждой итерации список перестраивается с повторным поиском всех элементов по имени...
чудны извращения мысли программистов lcl
Re: XMLDocument.removechild чяднт?
Добавлено:
11.10.2013 05:04:31
Иван Шихалев
Извращения-то тут откуда? Такое поведение определено в стандартах DOM.
Re: XMLDocument.removechild чяднт?
Добавлено:
11.10.2013 13:36:30
vada
- Код: Выделить всё
for i:=1 to il.Count do
il.Item[i].ParentNode.RemoveChild(il.Item[i]);
Нууу... Так нельзя. Полюбасу грабли будут. Если есть желание в цикле элементы поудалять, так надо цикл в обратную сторону запускать downto, типа.