【qt】【xml】xml读,存,增,删操作参考模板
读取,初始化xml参考模板
void EmapEditWindow::initXml() { bool flagtmp=0; QDomDocument doc; QFile inputFile("test.xml"); if(!inputFile.open(QFile::ReadOnly)) { qDebug() << "inputFile.open(QFile::ReadOnly) error!\n"; inputFile.close(); flagtmp=1;//说明文档里没有东西 } if(!flagtmp) { //xml里已经有东西 if(!doc.setContent(&inputFile)) { qDebug() << "setContent error!\n"; inputFile.close();return; } inputFile.close(); //读入对应信息并存储 mapNum=0; mapInfoList.clear(); QDomElement root=doc.documentElement(); QDomNodeList list=doc.elementsByTagName("map"); for(int i=0;i<list.count();i++) { QDomElement m = list.at(i).toElement(); QString _mapPath = m.attribute("path"); mapNum+=1; MyMapList _a; _a.init(); _a.mapPath = _mapPath; mapInfoList.append(_a); } if(!inputFile.open(QFile::WriteOnly|QFile::Truncate)) //先读进来,再重写,如果不用truncate就是在后面追加内容,就无效了 { qDebug() << "add last open error!\n";return; } QTextStream ts(&inputFile); doc.save(ts,4); inputFile.close(); return; } inputFile.close(); //如果xml没有东西 QFile file("test.xml"); //相对路径、绝对路径、资源路径都可以 if(!file.open(QFile::WriteOnly|QFile::Truncate))return; QDomDocument doc1; //写入xml头部 QDomProcessingInstruction instruction; //添加处理命令 //利用系统时间,组成一个QString SYSTEMTIME sys; GetLocalTime( &sys ); QString t_str = QString::number(sys.wYear)+"."+QString::number(sys.wMonth)+ "."+QString::number(sys.wDay)+"-"+QString::number(syxifuchuangs.wHour)+":"+QString::number(sys.wMinute); //instruction建议一点都不要改!setContent error很可能就是这里的问题; instruction=doc1.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\""); doc1.appendChild(instruction); //添加根节点 QDomComment comment = doc1.createComment(t_str); doc1.appendChild(comment); QDomElement root1 = doc1.createElement("Central"); root1.setAttribute("update_time", t_str); // 属性 root1.setAttribute("mapNum",0); doc1.appendChild(root1); //输出到文件 QTextStream out_stream(&file); doc1.save(out_stream,4); //缩进4格 file.close(); initmap_flag=1; }
删除/添加子节点参考模板
QDomDocument doc; QFile inputFile("test.xml");//相对路径里面test.xml if(!inputFile.open(QFile::ReadOnly)) { qDebug() << "inputFile.open(QFile::ReadOnly) error!\n"; inputFile.close(); return; } if(!doc.setContent(&inputFile)) { qDebug() << "setContent error!\n"; inputFile.close();return; } inputFile.close(); QDomElement root=doc.documentElement(); QDomNodeList list=doc.elementsByTagName("map"); //由标签名定位 for(int i=0;i<list.count();i++) { QDomElement e=list.at(i).toElement();//map if(e.attribute("row")==QString::number(ans_num)) { //删除原来子节点 QDomNodeList listAllNodes = e.childNodes(); while (listAllNodes.size() > 0) { e.removeChild(listAllNodes.at(0)); //qDebug()<<"a child had been deleted"; } //增加节点 for(int j=0;j<btnList.size();j++) { QDomElement child = doc.createElement("detector"); child.setAttribute("x",btnList[j]->pos().x()); e.appendChild(child); // qDebug()<<"add a detector in xml"<<j; } break; } } if(!inputFile.open(QFile::WriteOnly|QFile::Truncate)) //先读进来,再重写,如果不用truncate就是在后面追加内容,就无效了 { qDebug() << "add last open error!\n";return; } QTextStream ts(&inputFile); doc.save(ts,4); inputFile.close();