最近研究了一下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文件的读写的更多相关文章

  1. QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写   ...

  2. Qt对ini文件的读写

    研究了以下Qt下ini文件的读写,不废话,上干货. 写入ini文件 WriteIni.cpp void WriteIni::writeSettings() { QSettings settings(& ...

  3. 初识---Qt解析XML文件(QDomDocument)

    关于XML及其使用场景不在此多做介绍,今天主要介绍Qt中对于XML的解析.QtXml模块提供了一个读写XML文件的流,解析方法包含DOM和SAX,两者的区别是什么呢?  DOM(Document Ob ...

  4. Xml文件并发读写的解决方法

    之前对xml的操作大都是通过XmlDocument对象来进行,但是这样的情况对于没有并发的是非常合适的,最近遇到了并发读写xml文件的情况.通过文件流来操作能解决大部分的并发情况,对于极端的情况会有问 ...

  5. dom4j的读写xml文件,读写xml字符串

    百度了一些博客,大同小异,在选取jar包工具的时候大概看了下,大抵是jdom原始,dom4j优秀.于是做了些练习. 参考:http://www.cnblogs.com/mengdd/archive/2 ...

  6. Qt解析XML文件(QXmlStreamReader)

    (2013-08-03 10:53:53) 转载▼       如何使用QXmlStreamReader来解析格式良好的XML,Qt的文档中指出,它是一种更快.更方便的Qt自己的SAX解析器(QXml ...

  7. JAVA对XML文件的读写(有具体的代码和解析

    XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 web 开发的许多方面,常用于简化数据的存储和共享. xml指令 处理指令, ...

  8. .NET下XML文件的读写

    一.前言: XML是微软.Net战略的一个重要组成部分,而且它可谓是XML Web服务的基石,所以掌握.Net框架下的XML技术自然显得非常重要了.本文将指导大家如何运用C#语言完成.Net框架下的X ...

  9. 【C++】【TinyXml】xml文件的读写功能使用——写xml文件

    TinyXml工具是常用比较简单的C++中xml读写的工具 需要加载 #include "TinyXml\tinyxml.h" 在TinyXML中,根据XML的各种元素来定义了一些 ...

随机推荐

  1. linux下面安装配置mongoDB

    不知道为什么官网最新的2.4我一直解压失败 下载之前确认一下你的操作系统是64位的还是32位的对应去下载 64位链接:http://fastdl.mongodb.org/linux/mongodb-l ...

  2. ASP.NET MVC C#知识点提要

    ASP.NET MVC C#知识点提要 本篇博文主要对asp.net mvc开发需要撑握的C#语言知识点进行简单回顾,尤其是C# 3.0才有的一些C#语言特性.对于正在学asp.net mvc的童鞋, ...

  3. TOGAF架构开发方法(ADM)之迁移规划阶段

    TOGAF架构开发方法(ADM)之迁移规划阶段 1.8 迁移规划(Migration Planning) 企业架构开发方法各阶段——迁移规划 1.8.1 目标 本阶段的目标是: 确保实施和迁移规划与企 ...

  4. 关于JSF国际化问题

    由于最近一个项目的MVC层框架用的是JSF,所以在摸索中遇到了不少的问题,其中有一项就是关于国际化的的问题. 小弟在网上找了很多的资料,其实无外乎内容就都那样,可不知是小弟人品太差还是由于确实技术上有 ...

  5. ios的自动转屏

    在IOS6以前,设置转屏需要用到方法 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)x 在6以后,取代它 ...

  6. ubuntu下vsftpd配置

    网上的文章好难懂啊..只想要简单粗暴,弄好能用就行啊,复杂的以后研究不行吗...折腾好久,其实弄出来能用不就这么点内容吗... 本文在Ubuntu Server 14.04 amd64系统测试. 安装 ...

  7. 数据库中的null问题

    在数据库中有些列的值可以为null,这一篇,我们围绕数据库中的null来讲述. 1. null与 “”.0的区别   数据库中的null表示——不知道,“”——一个空字符串,0则是一个数值.  所以n ...

  8. MVC源码分析 - 路由匹配

    上一篇 说到了路由事件注册以及路由表的生成, 前面 也解析到了, 管道事件的建立, 那么接下来, 肯定就是要调用执行这些事件了, 这些就不表了, 我已经得到我想要的部分了, 接下来, 在执行这些管道事 ...

  9. centos6.8 搭建nginx+uwsgi+Flask

    1.安装 yum install nginx -y pip3 install uwsgipip3 install Flask 2.uwsgi配置(保存/etc/uwsgi.ini,run:uwsgi ...

  10. 使用pip安装报错的处理方法

    在新的机子上使用pip安装程序一直报错: Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connect ...