Russian Qt Forum

Qt => XML => Тема начата: reiner от Март 31, 2012, 20:58



Название: Сохранить QDomNode
Отправлено: reiner от Март 31, 2012, 20:58
Здравствуйте!
В своём проекте столкнулся со следующей проблемой:
Есть много объектов с данными. Требуется, чтоб в каждом была функция, генерирующая его xml представление (QDomNode, или QDomElement, к примеру, со вложенными узлами). Есть объект, который эти объекты собирает, формирует из них QDomDocument и сохраняет в файл.
Пытался сделать как: в каждом из объектов с даными генерировал QDomNode*, потом пытался через  appendChild их прицепить к документу, и записать, но не пишет ничего, выводит ошибку Calling appendChild() on a null node does nothing.
Подскажите пожалуйста, как решить такую проблему.


Название: Re: Сохранить QDomNode
Отправлено: mutineer от Март 31, 2012, 21:40
Видимо какой-то из нодов (исходный или который добавляешь) пустой


Название: Re: Сохранить QDomNode
Отправлено: _OLEGator_ от Апрель 01, 2012, 11:26
Как генерируешь QDomNode?


Название: Re: Сохранить QDomNode
Отправлено: reiner от Апрель 01, 2012, 14:18
QDomNode * node = new QDomNode ();
node.setNodeValue("value");



Название: Re: Сохранить QDomNode
Отправлено: _OLEGator_ от Апрель 01, 2012, 16:59
Так не получится. В Qt странно несколько сделано создание узлов. Создавать можно только при помощи QDomDocument:
Код
C++ (Qt)
QDomElement QDomDocument::createElement ( const QString & tagName )


Название: Re: Сохранить QDomNode
Отправлено: reiner от Апрель 01, 2012, 20:13
Собственно, и спрашивать сюда пошёл чтобы выяснить, нет ли какого другого пути.
Кстати, QDomNode можно присоединять потом к этому элементу, или только QDomElement или QDomText?
И ещё, никто не писал троллям относительно этой проблемы? Не планируют ли они изменить что-то в механизме формирования дерева?


Название: Re: Сохранить QDomNode
Отправлено: _OLEGator_ от Апрель 02, 2012, 08:57
Данная функция просто создает новый узел, не добавляя его в QDomDocument. Почему это не статическая функция и почему нельзя создать корректный узел без использования QDomDocument (возможно и есть способ, но я о нем не знаю) я не понимаю.
Все остальное конечно доступно, в том числе добавление узла к элементу и добавление элементов в него.
Сомневаюсь, что они это планируют менять, ибо в справке числится так:
Код
C++ (Qt)
QDomElement::QDomElement ()
Constructs an empty element. Use the QDomDocument::createElement() function to construct elements with content.