最近研究了一下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. iOS 开发之协议-代理传值

    刚开始做iOS开发的时候,对 protocol.delegate 的理解一直都是晕晕乎乎一知半解的状态,不知道两个UIViewController之间怎么进行传值. 面试过几个童鞋,问道怎么用 del ...

  2. JQuery实现分页程序代码

    JQuery实现分页程序代码 做Web开发的程序员,分页时在所难免的,微软GridView.AspPager等设置分页数据可以自动分页,但是这里浏览器会闪动,用户体验不是很友好,在此我整理了JQuer ...

  3. T-SQL 临时表、表变量、UNION

    T-SQL 临时表.表变量.UNION 这次看一下临时表,表变量和Union命令方面是否可以被优化呢? 阅读导航 一.临时表和表变量 二.本次的另一个重头戏UNION 命令 一.临时表和表变量 很多数 ...

  4. Centos 5上使用YUM安装GIT

    网上搜索的基本上都是一样的内容 1.先安装git依赖的包 yum install zlib-devel yum install openssl-devel yum install perl yum i ...

  5. app wap开发mobile隐藏地址栏的js

    function scrolltol (){ setTimeout ( function () { , ) }, ); } window . onload = function () { if ( d ...

  6. 软件设计师.NET认证考试测试卷(试题及答案)

    软件设计师.NET认证考试测试卷 注意事项:用蓝.黑色钢笔答题.保持卷面整洁. 得分 阅卷人 一.单项选择(40分,每小题1分) 1.以下标识符中不全是关键字的是(D  ) A.case for in ...

  7. avalon1.5+中组件的定义方式

    avalon在1.5之后引入新的组件定义和使用方式,其总的宗旨是为了使定义和使用组件更加简单 组件库的概念 首先,需要注意的是,引入了组件库的概念(也可以理解为namespace),之后定义的组件必须 ...

  8. 用php 进行对文件的操作 (上)

    如何让自己磁盘中的文件夹和目录显示在网页上?那就来看一下,用php是怎么来操作他们的吧 php中文件,一般包含两块内容,文件和目录 先来一句一句的看代码,及他的作用 运行后看一下结果 file 指的是 ...

  9. php钩子程序设计

      序   作为程序员,设计出优雅而完美的系统,永远是让我们非常兴奋的事情.高手不在于你会多少语言,而在于你有多高的思想.   在设计中,怎么体现自身价值,那就是要比别人多想几步.   讲钩子程序,起 ...

  10. 360回归A股,周鸿祎来给BAT和小米添堵了

    排着队回国内上市的公司名单里,终于多了奇虎360的名字. 奇虎360今天宣布,公司董事会收到了来自董事长周鸿祎.中信证券及其附属公司.Golden Brick Capital Private Equi ...