Russian Qt Forum

Qt => Вопросы новичков => Тема начата: stasuss от Июнь 26, 2012, 09:43



Название: удаление нодов xml
Отправлено: stasuss от Июнь 26, 2012, 09:43
Всем привет.

недавно начал таки переход на кьют. решил вот переписать программку на эту библиотеку и столкнулся с проблемкой. никак не могу заставить программу удалять ноды из dom дерева.

имеется файлик типа такой:
Код:
<parent>
  <child>text</child>
  ... много их
  <child>text</child>
</parent>

и вот этот текст надо сравнивать со списочком, загруженым в QSet. при несовпадении удалять ноду

не буду приводить полный код ибо он вполне нормальный, приведу код удаления

Код:
parc=parc.parentNode().removeChild(parc).toElement();

а ну и еще перебор детишек у меня происходит с помощью такого for:

Код:
for (QDomElement parc=block.firstChildElement("Parcels").firstChild().toElement(); !parc.isNull(); parc=parc.nextSibling().toElement())

не смотрите на то что это подразумевает что файл выглядит не так как я его описал) смысл в этом

таким образом я имею то что при удалении что то происходит с указателем на текущую ноду и цикл вылетает.. а вот что происходит не пойму, поидее функция удаления ноды должна возвращать указатель на предыдущую ноду...

кто нибудь сталкивался?


Название: Re: удаление нодов xml
Отправлено: Serr500 от Июнь 26, 2012, 09:49
поидее функция удаления ноды должна возвращать указатель на предыдущую ноду...

Цитировать
QDomNode QDomNode::removeChild ( const QDomNode & oldChild )
Removes oldChild from the list of children. oldChild must be a direct child of this node.

Returns a new reference to oldChild on success or a null node on failure.
Про предыдущую сказано тут где? Новую ссылку на неё же саму метод этот возвращает.


Название: Re: удаление нодов xml
Отправлено: stasuss от Июнь 26, 2012, 09:52
тогда я чего то не понимаю... что значит новую ссылку на ее же саму, если ее удалили?
а как мне тогда цикл продолжить с текущей позиции? гуру qt xml помогите(


Название: Re: удаление нодов xml
Отправлено: mutineer от Июнь 26, 2012, 10:10
тогда я чего то не понимаю... что значит новую ссылку на ее же саму, если ее удалили?
а как мне тогда цикл продолжить с текущей позиции? гуру qt xml помогите(

Удалили ноду из дерева, но сама нода все еще жива, хоть и живет вне старого дерева. Вот на эту оторванную ноду тебе ссылку и возвращают


Название: Re: удаление нодов xml
Отправлено: stasuss от Июнь 26, 2012, 10:12
а как все таки цикл продолжить? создать копию текущей ноды перед удалением и вызвать метод previousSibling()?


Название: Re: удаление нодов xml
Отправлено: mutineer от Июнь 26, 2012, 10:28
Решение в лоб - в цикле ноды не удаляешь, а собираешь в контейнер ссылки на них. А потом вне цикла все накопившиеся удаляешь


Название: Re: удаление нодов xml
Отправлено: stasuss от Июнь 26, 2012, 10:31
блин. ну об этом я тоже думал) а в цикле что никак?