xml文件解析与写入是我目前接触的第一个跟随项目进度的工程,由于调研是太过于沉迷CSDN,忽略了文档的重要性,调研成果在真实的需求面前不堪一击,让我老大好是头疼,硬生生帮我写了一大半代码才让我彻底搞懂这些玩意儿,这里写一篇博客来记录学到的知识,同时也算是自省吧。
下面这段摘自Qt creater 快速入门,是对xml文件读写方法的完整介绍:
QT中的QTXML模块提供了三种方法来对处理xml文档的方式:最常用的是DOM方式,可进行读写;SAX方法,可以进行读取;基于流的方法,分别使用QXmlStreamReader和QXmlStreamWriter来进行读写。同时要在Qt creater中的.pro文件中加入QT +=xml;如果使用VS+QT插件的话,在选项中QT找到xml和QXML √ 即可。
我这里主要使用的是DOM方式来进行的,这样解析和写入用的是相反的方式,原理都相同,比较方便。
DOM (QDomDocument Object Model,文档对象模型)提供了一个接口来访问和改变xml文档,QDomDocument对象用来表示整个文档,而文档中所有QDOM的节点都是QDomNode类的子类。
XML文档格式,内容及说明我在另一篇文章中已经详细说明,这里不再赘述,直接开始通过DOM来进行读写。
对XML的解析(从xml文档中提取出有效信息,放入内存中,可以自己设计比如QList类型,也可以直接输出成类似word文档):
QDomElement configDataRoot = docData.documentElement();//读取根节点
QDomNodeList rootList= configDataRoot.elementsByTagName("rootList");//读取第一个子节点 rootList节点
for (int i = 0; i < rootList.count(); i++)
{
QDomNode serverInfo = rootList.at(i);
QDomNodeList serverInfoNode = serverInfo.childNodes();
QString madeIp= serverInfoNode.at(i).attributes().namedItem("IP").nodeValue();
QString madeIe= serverInfoNode.at(i).attributes().namedItem("Ie").nodeValue().toLower();
QDomNode textNodeData = serverInfoNode.at(i);
QString textNode = textNodeData.firstChild().nodeValue();
}
简单的提取了节点属性为IP和Ie的值,并且提取了节点内容,上述代码是把逻辑简化后的结果,主要提取时使用的方法要牢记,下次再让老大帮忙就剁手了!
接下来是保存的方式,其实就是把内存中的数据传进xml,还是通过DOM一系列函数,暂时写这么多,最近天天加班到半夜,再有时间再写完。
待续。。。