Russian Qt Forum
Сентябрь 21, 2024, 11:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: странный мусор при формировании XML  (Прочитано 4371 раз)
izoomer
Гость
« : Апрель 06, 2007, 15:09 »

есть вот такой xml
Код:

<?xml version='1.0'?>
<currentcounters>
    <currentdeposit>0</currentdeposit>
    <currentpaidorder>
        <paidorder type="normal" >picture/noteCoin.png</paidorder>
        <paidorder type="normal" >picture/noteCoin.png</paidorder>
    </currentpaidorder>
</currentcounters>

нужно удалить последний чайлд у <currentpaidorder> , и делаю это таким кодом ...
Код:

QFile file("currentCounters.xml");
if (!file.open(QFile::ReadWrite | QFile::Text)) {
QMessageBox::warning(this, tr("Read"),
tr("Cannot read file %1:\n%2.")
.arg("config.xml")
.arg(file.errorString()));
return;
    }
  QByteArray currentCountersData = file.readAll();

if (!docCurrentCounters.setContent(currentCountersData, &errorStr, &errorLine,
&errorColumn)) {
QMessageBox::warning(0, QObject::tr("DOM Parser"),
QObject::tr("Parse error at line %1, "
"column %2:\n%3")
.arg(errorLine)
.arg(errorColumn)
.arg(errorStr));
return;
}

QDomElement root = docCurrentCounters.documentElement();
if (root.tagName() != "currentcounters");
return 0;

QDomNode counterNode = root.firstChild();
while (!counterNode.isNull()) {
if ( counterNode.nodeName() == "currentpaidorder"){
QDomNode removedNode = counterNode.lastChild();
counterNode.removeChild(removedNode);
}
counterNode = counterNode.nextSibling();
}
file.write(docCurrentCounters.toByteArray(4));
file.close();


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

так вот ... после выполнения такого кода имеем такой xml
Код:

<?xml version='1.0'?>
<currentcounters>
    <currentdeposit>0.5</currentdeposit>
    <currentpaidorder>
        <paidorder type="normal" >picture/noteCoin.png</paidorder>
    </currentpaidorder>
</currentcounters>
oteCoin.png</paidorder>
    </currentpaidorder>
</currentcounters>



то есть после послденего закрывающего тега какие то обрезки ... откуда ? ... что не так ?
Записан
Вячеслав
Гость
« Ответ #1 : Апрель 06, 2007, 21:10 »

перед write файл переоткрой с режимом QIODevice::Truncate или позови resize() .....
Записан
izoomer
Гость
« Ответ #2 : Апрель 07, 2007, 20:04 »

ТОЧНО!!! file.resize(0) перед file.write помогло .... Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 21.