Название: Изменить значение элемента
Отправлено: 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();
Название: Re: Изменить значение элемента
Отправлено: alexman от Апрель 12, 2010, 12:58
QDomElement QDomNode::toElement () const - возвращает не ссылку!
Название: Re: Изменить значение элемента
Отправлено: break от Апрель 12, 2010, 13:16
QDomElement QDomNode::toElement () const - возвращает не ссылку! Это к делу отношения не имеет QDomElement - explicing shared класс здесь есть ошибка out.setCodec( QTextCodec::codecForName("UTF-8") ); а не out.setCodec("UTF-8"); а это вообще не нужно out << &optFile; это портит XML файл! И вообще ты читаешь файл - потом пытаешься опять в него писать - он все время разрастается!
Название: Re: Изменить значение элемента
Отправлено: alexman от Апрель 12, 2010, 13:18
QDomElement QDomNode::toElement () const - возвращает не ссылку! Это к делу отношения не имеет QDomElement - explicing shared класс Вот спс! Раньше внимания не обращал!
Название: Re: Изменить значение элемента
Отправлено: break от Апрель 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
Название: Re: Изменить значение элемента
Отправлено: Wachburn от Апрель 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 конструкция и правда интересная... спасибо
|