最近研究了一下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. listView 分页加载数据

    Android应用 开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页 的形式来展示数据,个人觉得这样会有 ...

  2. 简化日常工作之三:自己写一个CI脚手架

    程序员是诗人,应该写一些有思想意义的code,而不是每天重复造轮子,写一些低成本的业务逻辑. ---------------------------------一个脚本仔的心声 由于目前公司使用CI框 ...

  3. java.sql.Types,数据库字段类型,java数据类型的对应关系

    以下转自:http://kummy.itpub.net/post/17165/172850 本文在原文基础上有增减. 本概述是从<JDBCTM Database Access from Java ...

  4. CMake学习

    CMake学习 本篇分享一下有关CMake的一些学习心得以及相关使用. 作者:AlphaGL.版权所有,欢迎保留原文链接进行转载 :) 本文目录如下: 1.CMake介绍 2.CMake安装与使用 2 ...

  5. 【转】关于python中re模块split方法的使用

    注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于 ...

  6. CSS多列、用户界面属性

    CSS多列 常用属性: column-count 分几列 column-gap 列间距 column-rule 列分割线的样式(写法和border一样) 例如: 一个div分三列,列之间间距为10px ...

  7. 0116MySql主从复制监控

    如何自动化监控mysql主从服务-- 第一步创建目录mkdir -p /tmp/mysql/masterslave #日志存放目录在/root下面创建sh目录 #存放执行的SHELL脚本 -- 第二步 ...

  8. codewars-random(2)

    找出数组中的间谍 思路一:遍历一遍数组,开始前将flag设置为0:将count设为0:每当出现一个奇数(注意负数)count加1,当count大于等于2时将flag至为1: 再遍历一遍数组,如果fla ...

  9. magento模块的建立

    所有路径都是从根目录开始的: 1.建立模块的配置文件: 路径:app/etc/models/下建一个文件(模块名称是Orderlottery)为Bf170_Orderlottery.xml,内容如下: ...

  10. LR设置关联---部分内容摘自网络--望见谅

    模拟环境---LR机票定票系统设置:首页点击administration-勾选Set LOGIN form's action tag to an error page.选项,点击update. 现在许 ...