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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменить значение элемента  (Прочитано 6682 раз)
Wachburn
Гость
« : Апрель 12, 2010, 12:39 »

Есть XML файл:
Код
XML
<options>
   <payercode>5</payercode>
   <enterprise>Microsoft</enterprise>
   <payerbank>Demark</payerbank>
</options>
 
Нужно достать значение 5 из элемента <payercode>, увеличить его на единицу и записать обратно. Извлечь не проблема, изменить тоже, но как его записать, чтоб не потерять все остальные элементы? Пытаюсь делать так:
Код:
        QDomDocument opt;
        QFile optFile("options.xml");
        optFile.open(QFile::ReadWrite);
        QTextStream out(&optFile);
        opt.setContent(&optFile);

        QDomElement docElement = opt.documentElement(); // получаю корень
        QDomNode node;

        node = docElement.firstChild(); /*для тренировки пытаюсь хотябы какой-нибудь элемент   изменить, т.е. первый */
        std::cout << node.toElement().text().toStdString(); // элемент правильно извлекается

        node.toElement().setNodeValue("wefe");                   // но здесь
        std::cout << node.toElement().text().toStdString();   // он не устанавливается !!!
       
        out.setCodec("UTF-8");
        out << &optFile;
        opt.save(out, 5, QDomNode::EncodingFromTextStream);
        optFile.close();

Записан
alexman
Гость
« Ответ #1 : Апрель 12, 2010, 12:58 »

QDomElement QDomNode::toElement () const - возвращает не ссылку!
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #2 : Апрель 12, 2010, 13:16 »

Цитировать
QDomElement QDomNode::toElement () const - возвращает не ссылку!

Это к делу отношения не имеет QDomElement - explicing shared класс

здесь есть ошибка

out.setCodec( QTextCodec::codecForName("UTF-8") );

а не

out.setCodec("UTF-8");

а это вообще не нужно

out << &optFile;

это портит XML файл!

И вообще ты читаешь файл - потом пытаешься опять в него писать - он все время разрастается!
« Последнее редактирование: Апрель 12, 2010, 13:34 от break » Записан
alexman
Гость
« Ответ #3 : Апрель 12, 2010, 13:18 »

Цитировать
QDomElement QDomNode::toElement () const - возвращает не ссылку!

Это к делу отношения не имеет QDomElement - explicing shared класс


Вот спс! Раньше внимания не обращал!
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #4 : Апрель 12, 2010, 13:49 »

так будет работать

Код
C++ (Qt)
int main(int argc, char *argv[])
{
QDomDocument opt;
 
QFile iFile("options.xml");
iFile.open(QFile::ReadOnly);
opt.setContent(&iFile);
 
QDomElement docElement = opt.documentElement(); // получаю корень
QDomNode node;
 
node = docElement.firstChild(); /*для тренировки пытаюсь хотябы какой-нибудь элемент   изменить, т.е. первый */
qDebug() << node.toElement().text(); // элемент правильно извлекается
 
node.childNodes().item(0).setNodeValue( "wefe" ); // такая вот интересная конструкция !
//node.toElement().setNodeValue("wefe");                   // но здесь
qDebug() << node.toElement().text();   // он не устанавливается !!!
 
QFile oFile("options.xml");
oFile.open(QFile::ReadWrite);
 
QTextStream out(&oFile);
out.setCodec( QTextCodec::codecForName("UTF-8") );
//out << &optFile; --- ТРЕШ не надо это здесь!!!!!!!!!!
opt.save(out, 5, QDomNode::EncodingFromTextStream);
oFile.close();
}
 

только я в упор не пойму почему тролли не сделали метод setText для QDomElement
Записан
Wachburn
Гость
« Ответ #5 : Апрель 12, 2010, 15:22 »

так будет работать

Код
C++ (Qt)
int main(int argc, char *argv[])
{
QDomDocument opt;
 
QFile iFile("options.xml");
iFile.open(QFile::ReadOnly);
opt.setContent(&iFile);
 
QDomElement docElement = opt.documentElement(); // получаю корень
QDomNode node;
 
node = docElement.firstChild(); /*для тренировки пытаюсь хотябы какой-нибудь элемент   изменить, т.е. первый */
qDebug() << node.toElement().text(); // элемент правильно извлекается
 
node.childNodes().item(0).setNodeValue( "wefe" ); // такая вот интересная конструкция !
//node.toElement().setNodeValue("wefe");                   // но здесь
qDebug() << node.toElement().text();   // он не устанавливается !!!
 
QFile oFile("options.xml");
oFile.open(QFile::ReadWrite);
 
QTextStream out(&oFile);
out.setCodec( QTextCodec::codecForName("UTF-8") );
//out << &optFile; --- ТРЕШ не надо это здесь!!!!!!!!!!
opt.save(out, 5, QDomNode::EncodingFromTextStream);
oFile.close();
}
 

только я в упор не пойму почему тролли не сделали метод setText для QDomElement


конструкция и правда интересная... спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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