Название: Не могу сделать простую вещь - добавить подэлемент в дерево. Отправлено: xintrea от Август 16, 2008, 23:59 Здравствуйте!
Вторые сутки бъюсь на простой проблемой. Кратко задача такая. Есть QDomElement, содержащий некоторое DOM дерево. Надо - добавить в него один элемент (на первый уровень вложения), приклеить получившийся элемент к пустому документу, и сохранить документ в файл. Вот болванка, дальше мы бодем изменять в ней один блок кода Код: // Коструирование DOM документа для записи в файл В результате мы имеем Код: Doc document for write "<?xml version="1.0" encoding="UTF-8"?> Если закомментировать код Код: // Добавление формата версии к элементу хранящему DOM дерево хранимых данных То ошибки не возникает. Логично предполагаю, что проблема в этом куске кода, что-то там добавляется некорректно. Начинаю экспериментировать. Пробую так Код: // Добавление формата версии к элементу хранящему DOM дерево хранимых данных Ошибки нет, но узел <format version="1" subversion="1" /> не появляется. Пробовал еще по-разному. Результат один и тот же - ошибки нет, но узла <format version="1" subversion="1" /> тоже нет. Вот еще как пробовал Код: // Добавление формата версии к элементу хранящему DOM дерево хранимых данных И еще пробовал варианты кода без cloneNode() в последней строке. Ничего не помогает - ошибки нет, но и узла <format version="1" subversion="1" /> тоже нет. Я уже не знаю что делать. На просторах интернета ничего внятного не нашел. Кроме того, что подобная ошибка происходит в режиме компиляции C++ (не в чистом C). На русских ресурсах такую ошибку видел только один человек. У боржуев - ошибка популярна, возникает в GTK+, в каких-то HTML-парсерах, в Qt. Но с моим знанием англицкого понять что к чему весьма трудно. Вопрос - что делать то? Задачка ведь простая, но такие сложности выше моего понимания. Кто что может сказать, возможно у когото есть подобный опыт. Название: Re: Не могу сделать простую вещь - добавить подэлемент в дерево. Отправлено: ритт от Август 17, 2008, 01:07 а попробуй doc.appendChild(elm) выполнить до QDomElement elm=nodemodel->export_fullmodeldata_to_dom(nodemodel->rootItem) ?
ещё можешь попробовать передавать ссылку на QDomDocument в export_fullmodeldata_to_dom(...) я с таким странным поведением ни разу не сталкивался - у меня импорт/экспорт хмл работает вообще без неожиданностей (правда, никогда не создаю временных нод и при генерировании документа предпочитаю обходиться без клонирования) зы: вроде ж решили уже пользоваться валидными документами? :) Код: QDomDocument doc("doc"); Название: Re: Не могу сделать простую вещь - добавить подэлемент в дерево. Отправлено: xintrea от Август 17, 2008, 12:02 Да, помогло две вещи.
1. Создавать валидный документ с указанием DOCTYPE, т. е. вместо Код: QDomDocument doc(); Код: QDomDocument doc("doc"); 2. Прилеплять ветку без глубокого копирования, т. е. вместо Код: elm.appendChild(formvers.cloneNode()); Код: elm.appendChild(formvers); |