Qt对xml文件的读写
最近研究了一下qt下对xml文件的读写,小计一下,成为自己的知识。
main函数调用:
#include <QApplication>
#include "readconfig.h"
#include "writeconfig.h" int main(int argc,char **argv)
{
QApplication a(argc,argv); //ReadConfig readConfig; //readConfig.changeSave(); WriteConfig writeConfig; QFile file;
QString fileName = "Motor.xml";
if(!file.exists(fileName))
{
writeConfig.createFile(fileName);
} writeConfig.writeFile(fileName); a.exec(); return ;
}
写入xml文件WriteConfig.cpp
#include "writeconfig.h" WriteConfig::WriteConfig()
{
} bool WriteConfig::writeFile(QString fileName)
{
QFile file(fileName); if(!file.open(QFile::ReadOnly | QFile::Text))
{
qDebug()<<"open for add error...";
return false;
} QDomDocument doc; QString errorStr;
int errorLine;
int errorColumn; if (!doc.setContent(&file, false, &errorStr, &errorLine, &errorColumn))
{
qDebug()<<"add setcontent error..." <<"errorStr&&&&"<<errorStr<<"errorLine"<<errorLine<<"errorColume"<<errorColumn;
//file.close();
} file.close(); QDomElement root = doc.documentElement();
if(root.isNull())
{
root = doc.createElement("configinfo");
}
QDomElement elementRoot = doc.createElement("motor");
elementRoot.setAttribute("mount","");
QDomElement elementSpeed = doc.createElement("speed");
QDomElement elementAcceleSpeed= doc.createElement("accelespeed");
QDomElement elementAASpeed = doc.createElement("aaspeed");
QDomElement elementPosition = doc.createElement("position"); QDomElement elementV1 = doc.createElement("v");
QDomElement elementV2 = doc.createElement("v");
QDomElement elementV3 = doc.createElement("v");
QDomElement elementV4 = doc.createElement("v");
QDomElement elementV5 = doc.createElement("v");
QDomElement elementV6 = doc.createElement("v");
QDomElement elementA1 = doc.createElement("a");
QDomElement elementA2 = doc.createElement("a");
QDomElement elementA3 = doc.createElement("a");
QDomElement elementA4 = doc.createElement("a");
QDomElement elementA5 = doc.createElement("a");
QDomElement elementA6 = doc.createElement("a");
QDomElement elementAA1 = doc.createElement("aa");
QDomElement elementAA2 = doc.createElement("aa");
QDomElement elementAA3 = doc.createElement("aa");
QDomElement elementAA4 = doc.createElement("aa");
QDomElement elementAA5 = doc.createElement("aa");
QDomElement elementAA6 = doc.createElement("aa");
QDomElement elementP1 = doc.createElement("p");
QDomElement elementP2 = doc.createElement("p");
QDomElement elementP3 = doc.createElement("p");
QDomElement elementP4 = doc.createElement("p");
QDomElement elementP5 = doc.createElement("p");
QDomElement elementP6 = doc.createElement("p"); QDomText text;
text = doc.createTextNode("123.25");
elementV1.appendChild(text);
elementSpeed.appendChild(elementV1);
text = doc.createTextNode("223.25");
elementV2.appendChild(text);
elementSpeed.appendChild(elementV2);
text = doc.createTextNode("323.25");
elementV3.appendChild(text);
elementSpeed.appendChild(elementV3);
text = doc.createTextNode("423.25");
elementV4.appendChild(text);
elementSpeed.appendChild(elementV4);
text = doc.createTextNode("523.25");
elementV5.appendChild(text);
elementSpeed.appendChild(elementV5);
text = doc.createTextNode("623.25");
elementV6.appendChild(text);
elementSpeed.appendChild(elementV6); text = doc.createTextNode("1023.25");
elementA1.appendChild(text);
elementAcceleSpeed.appendChild(elementA1);
text = doc.createTextNode("2023.25");
elementA2.appendChild(text);
elementAcceleSpeed.appendChild(elementA2);
text = doc.createTextNode("3023.25");
elementA3.appendChild(text);
elementAcceleSpeed.appendChild(elementA3);
text = doc.createTextNode("4023.25");
elementA4.appendChild(text);
elementAcceleSpeed.appendChild(elementA4);
text = doc.createTextNode("5023.25");
elementA5.appendChild(text);
elementAcceleSpeed.appendChild(elementA5);
text = doc.createTextNode("6023.25");
elementA6.appendChild(text);
elementAcceleSpeed.appendChild(elementA6); text = doc.createTextNode("12.25");
elementAA1.appendChild(text);
elementAASpeed.appendChild(elementAA1);
text = doc.createTextNode("22.25");
elementAA2.appendChild(text);
elementAASpeed.appendChild(elementAA2);
text = doc.createTextNode("32.25");
elementAA3.appendChild(text);
elementAASpeed.appendChild(elementAA3);
text = doc.createTextNode("42.25");
elementAA4.appendChild(text);
elementAASpeed.appendChild(elementAA4);
text = doc.createTextNode("52.25");
elementAA5.appendChild(text);
elementAASpeed.appendChild(elementAA5);
text = doc.createTextNode("62.25");
elementAA6.appendChild(text);
elementAASpeed.appendChild(elementAA6); text = doc.createTextNode("");
elementP1.appendChild(text);
elementPosition.appendChild(elementP1);
text = doc.createTextNode("");
elementP2.appendChild(text);
elementPosition.appendChild(elementP2);
text = doc.createTextNode("");
elementP3.appendChild(text);
elementPosition.appendChild(elementP3);
text = doc.createTextNode("");
elementP4.appendChild(text);
elementPosition.appendChild(elementP4);
text = doc.createTextNode("");
elementP5.appendChild(text);
elementPosition.appendChild(elementP5);
text = doc.createTextNode("");
elementP6.appendChild(text);
elementPosition.appendChild(elementP6); text.clear(); elementRoot.appendChild(elementSpeed);
elementRoot.appendChild(elementAcceleSpeed);
elementRoot.appendChild(elementAASpeed);
elementRoot.appendChild(elementPosition);
root.appendChild(elementRoot); if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
qDebug()<<"open for add error!!";
} QTextStream out(&file);
doc.save(out,);
file.close();
return true;
} bool WriteConfig::createFile(QString fileName)
{
QFile file(fileName);
file.open(QIODevice::ReadWrite);
QDomDocument doc;
QDomProcessingInstruction instruction;
instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"GB2312\"");
doc.appendChild(instruction);
QDomElement root = doc.createElement("configinfo"); doc.appendChild(root);
QDomText text = doc.createTextNode("");
root.appendChild(text);
QTextStream out(&file);
doc.save(out,);
file.close();
}
读xml文件ReadConfig.cpp
bool ReadConfig::openXmlFile(QString filePath)
{
QFile file(filePath);
if( !file.open(QFile::ReadOnly | QFile::Text))
{
qDebug() << QObject::tr("error::ParserXML->OpenXmlFile->file.open->%s\n") << filePath; return false;
} if( !m_doc.setContent(&file))
{
qDebug() << QObject::tr("error::ParserXML->OpenXmlFile->doc.setContent\n") << filePath; file.close();
return false;
}
file.close();
return true;
} bool ReadConfig::changeSave()
{
QString fileName = "Motor.xml";
if(!openXmlFile(fileName))
{
return false;
}
//修改保存xml
QDomElement root = m_doc.documentElement();
if(root.tagName()!= "configinfo")
return false;
QDomNode n = root.firstChild();
while ( !n.isNull() )
{
QDomElement e = n.toElement();
if( !e.isNull())
{
if( e.nodeName() == "motor" )
{
if(e.hasAttributes())
{
QDomNamedNodeMap tmpMap = e.attributes();
for(int i = ; i < (int)tmpMap.size();i++)
{
QString nodeName = tmpMap.item(i).nodeName();
QString nodeValue = tmpMap.item(i).nodeValue();
if("mount" == nodeName)
{
if(!nodeValue.isNull() && !nodeValue.isEmpty())
{
jointNum = nodeValue.toInt();
qDebug() << "************jointNum ="<<jointNum<<endl;
}
}
}
}
QDomNodeList list = e.childNodes(); //获得元素e的所有子节点的列表
for(int a=; a<list.count(); a++) //遍历该列表
{
QDomNode node = list.at(a);
if(node.isElement())
{
if( node.nodeName() == "speed" )
{
if(node.hasChildNodes())
{
QDomNodeList speedList = node.childNodes();
for(int i = ; i < speedList.size(); i++)
{
if("v" == speedList.at(i).toElement().tagName())
{
qDebug()<<"****speedList***"<<speedList.at(i).toElement().text().toDouble();
}
}
}
}
if( node.nodeName() == "accelespeed" )
{
if(node.hasChildNodes())
{
QDomNodeList speedList = node.childNodes();
for(int i = ; i < speedList.size(); i++)
{
if("a" == speedList.at(i).toElement().tagName())
{
qDebug()<<"****speedList***"<<speedList.at(i).toElement().text().toDouble();
}
}
}
}
if(node.nodeName() == "aaspeed")
{
if(node.hasChildNodes())
{
QDomNodeList speedList = node.childNodes();
for(int i = ; i < speedList.size(); i++)
{
if("aa" == speedList.at(i).toElement().tagName())
{
qDebug()<<"****speedList***"<<speedList.at(i).toElement().text().toDouble();
}
}
}
}
if(node.nodeName() == "position")
{
if(node.hasChildNodes())
{
QDomNodeList speedList = node.childNodes();
for(int i = ; i < speedList.size(); i++)
{
if("p" == speedList.at(i).toElement().tagName())
{
qDebug()<<"****speedList***"<<speedList.at(i).toElement().text().toLongLong();
}
}
}
}
}
}
}
}
n = n.nextSibling();
}
QFile filexml(fileName);
if( !filexml.open( QFile::WriteOnly | QFile::Truncate) )
{
qWarning("error::ParserXML->writeOperateXml->file.open\n");
return false;
}
QTextStream ts(&filexml);
ts.reset();
ts.setCodec("utf-8");
m_doc.save(ts, , QDomNode::EncodingFromTextStream);
filexml.close();
return true;
}
xml文件
Motor.xml
<?xml version="1.0" encoding="UTF-8"?>
<configinfo>
<motor mount="6">
<speed>
<v>123.25</v>
<v>223.25</v>
<v>323.25</v>
<v>423.25</v>
<v>523.25</v>
<v>623.25</v>
</speed>
<accelespeed>
<a>1023.25</a>
<a>2023.25</a>
<a>3023.25</a>
<a>4023.25</a>
<a>5023.25</a>
<a>6023.25</a>
</accelespeed>
<aaspeed>
<aa>12.25</aa>
<aa>22.25</aa>
<aa>32.25</aa>
<aa>42.25</aa>
<aa>52.25</aa>
<aa>62.25</aa>
</aaspeed>
<position>
<p>12325</p>
<p>22325</p>
<p>32325</p>
<p>42325</p>
<p>52325</p>
<p>62325</p>
</position>
</motor>
</configinfo>
在使用的时候一定要注意路径问题,以上代码通过编译测试。
Qt对xml文件的读写的更多相关文章
- QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写 ...
- Qt对ini文件的读写
研究了以下Qt下ini文件的读写,不废话,上干货. 写入ini文件 WriteIni.cpp void WriteIni::writeSettings() { QSettings settings(& ...
- 初识---Qt解析XML文件(QDomDocument)
关于XML及其使用场景不在此多做介绍,今天主要介绍Qt中对于XML的解析.QtXml模块提供了一个读写XML文件的流,解析方法包含DOM和SAX,两者的区别是什么呢? DOM(Document Ob ...
- Xml文件并发读写的解决方法
之前对xml的操作大都是通过XmlDocument对象来进行,但是这样的情况对于没有并发的是非常合适的,最近遇到了并发读写xml文件的情况.通过文件流来操作能解决大部分的并发情况,对于极端的情况会有问 ...
- dom4j的读写xml文件,读写xml字符串
百度了一些博客,大同小异,在选取jar包工具的时候大概看了下,大抵是jdom原始,dom4j优秀.于是做了些练习. 参考:http://www.cnblogs.com/mengdd/archive/2 ...
- Qt解析XML文件(QXmlStreamReader)
(2013-08-03 10:53:53) 转载▼ 如何使用QXmlStreamReader来解析格式良好的XML,Qt的文档中指出,它是一种更快.更方便的Qt自己的SAX解析器(QXml ...
- JAVA对XML文件的读写(有具体的代码和解析
XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 web 开发的许多方面,常用于简化数据的存储和共享. xml指令 处理指令, ...
- .NET下XML文件的读写
一.前言: XML是微软.Net战略的一个重要组成部分,而且它可谓是XML Web服务的基石,所以掌握.Net框架下的XML技术自然显得非常重要了.本文将指导大家如何运用C#语言完成.Net框架下的X ...
- 【C++】【TinyXml】xml文件的读写功能使用——写xml文件
TinyXml工具是常用比较简单的C++中xml读写的工具 需要加载 #include "TinyXml\tinyxml.h" 在TinyXML中,根据XML的各种元素来定义了一些 ...
随机推荐
- MacOSX 中如何动态隐藏Dock Icon
XCode创建了一个GUI工程,程序分几种运行模式,一种是agent模式,还有一种是GUI界面.Agent模式是没有界面的GUI程序,通过LaunchAgents启动.创建出来的Info.plist默 ...
- C# .Net 使用zxing.dll生成二维码,条形码
public static string GetBarcode(string format, string value, int? width, int? height) { ...
- CentOS 设置 pptpd VPN 步骤
安装CentOS6.3系统参见: <CentOS 6.3安装(详细图解教程)> 安装服务: 1.安装 ADSL PPPOE #yum -y install rp-pppoe 详细设置介绍看 ...
- Cocos2d-精灵的几个常识
性能考虑 该部分是总结的cocos2d的在线文档 1)如果有每个帧有25个以下的精灵需要更新,可以直接使用精灵 class TLayer(cocos.layer.Layer): is_even ...
- lll
//// whywhy unsigned int T = 1; ~T = 4294967294; T = 2;~T= 4294967293 ;T = 0;~T=4294967295; int T = ...
- 【转】double-array trie 译文+心得
原文:http://blog.csdn.net/zzran/article/details/8462002 概论 下面将呈现一种新的内部数组结构,它便是double-array.double-arra ...
- java异常处理01
当我们做java项目的时候,多多少少都会出现一些异常,如何快速处理异常也将会影响到一个项目开发的进度. 以下将是面对的一些异常将如何去处理: 1.数据库没有启动 解决方法:计算机-->管理--& ...
- [jQuery]on和bind事件绑定的区别
on和bind事件绑定的区别 一个demo展示 <!DOCTYPE html> <html lang="zh"> <head> <titl ...
- hdu 5996 dingyeye loves stone(博弈)
题目链接:hdu 5996 dingyeye loves stone 题意: 给你一棵树,树的每一个节点有a[i]个石子,每个人可以将这个节点的石子移向它的父亲,如果没有合法操作,那么就算输,现在给你 ...
- Graph - leetcode [图]
207. Course Schedule 有向图的环检测 bool canFinish(int numCourses, vector<pair<int, int>>& ...