Xml源代码

domxml.h

#ifndef DOMXML_H

#define DOMXML_H

#include <QString>

#include <QStringList>

#include <QDomDocument> //文件

#include <QDomProcessingInstruction>    //头部

#include <QDomElement>  //元素

#include <QDomText>

class DomXML

{

public:

DomXML();

//创建空的XML

static void CreateXML(QString strFilePath);

//搭建XML结构

static void AppendXML(QString strFilePath,QStringList list);

//写XML

static void WriteXML(QDomDocument &doc,QDomElement &root,QStringList list);

//写XML

static void ReadXML(QString strFilePath,

QStringList &fList,

QStringList &bList,

QStringList &pList,

QStringList &nList,

QStringList &tList

);

};

#endif // DOMXML_H

domxml.cpp

#include "domxml.h"

#include <QFile>

#include <QTextStream>

#include <QDateTime>

#include <QDebug>

#define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"

DomXML::DomXML()

{

}

//创建空的xml文件

void DomXML::CreateXML(QString strFilePath)

{

//打开文件

QFile file(strFilePath);

if(file.exists())

{

cout<<"FilePath exists";

return ;

}

else

{

bool bIsOk=file.open(QIODevice::WriteOnly);

if(bIsOk)

{//打开文件成功

//创建xml文档对象

QDomDocument doc;

//创建xml头部格式<?xml version="1.0" encoding="UTF-8"?>

QDomProcessingInstruction ins;

ins=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");

//追加元素

doc.appendChild(ins);

//根节点元素

QDomElement root=doc.createElement("日期销售清单");

doc.appendChild(root);

//保存

QTextStream stream(&file);//文本流关联文件

doc.save(stream,4); //4代表缩进4个字符

}

else

{//文件打开失败

cout<<"open file error";

return ;

}

}

file.close();

}

//搭建XML格式

void DomXML::AppendXML(QString strFilePath,QStringList list)

{

//打开文件

QFile file(strFilePath);

bool bIsOk=file.open(QIODevice::ReadOnly);

if(bIsOk)

{

//file和xml文档对象关联

QDomDocument doc;

bIsOk=doc.setContent(&file);

if(bIsOk)

{//关联成功

file.close();

//根节点元元素

QDomElement root=doc.documentElement();

//获取当地时间

QDateTime date=QDateTime::currentDateTime();

QString strDate=date.toString("yyyy-MM-dd");//2018-2-8

//qDebug()<<strDate;

//判断根节点下有没有子节点

if(root.hasChildNodes())

{

//查找最后一个子节点

QDomElement lastEmt=root.lastChildElement();

//日期相同,同一天不创建新节点

if(lastEmt.attribute("date")==strDate)

{//相同直接写入

WriteXML(doc,lastEmt,list);

}

else

{//不相同创建新节点

//创建日期子节点元素

QDomElement dateEmt=doc.createElement("日期");

//创建date属性

QDomAttr dateAttr=doc.createAttribute("date");

//设置属性的值

dateAttr.setNodeValue(strDate);

//节点和属性关联

dateEmt.setAttributeNode(dateAttr);

//把日期节点追加到根节点

root.appendChild(dateEmt);

WriteXML(doc,dateEmt,list);

}

}

else

{//没有子节点

//创建日期子节点元素

QDomElement dateEmt=doc.createElement("日期");

//创建date属性

QDomAttr dateAttr=doc.createAttribute("date");

//设置属性的值

dateAttr.setNodeValue(strDate);

//节点和属性关联

dateEmt.setAttributeNode(dateAttr);

//把日期节点追加到根节点

root.appendChild(dateEmt);

WriteXML(doc,dateEmt,list);

}

bIsOk=file.open(QIODevice::WriteOnly);

if(bIsOk)

{

//保存

QTextStream stream(&file);//文本流关联文件

doc.save(stream,4); //4代表缩进4个字符

}

file.close();

}

else

{

cout<<"setContent error";

return ;

}

}

else

{

cout<<"open file error";

return ;

}

}

//写XML

void DomXML::WriteXML(QDomDocument &doc,QDomElement &root,QStringList list)

{

//获取当地时间

QDateTime time=QDateTime::currentDateTime();

QString strTime=time.toString("hh-mm-ss");//20:20:20

//创建时间节点元素

QDomElement timeEmt=doc.createElement("时间");

//创建元素属性

QDomAttr timeAttr=doc.createAttribute("time");

//设置属性的值

timeAttr.setNodeValue(strTime);

//时间节点与属性相关联

timeEmt.setAttributeNode(timeAttr);

//将时间节点追加到日期节点后

root.appendChild(timeEmt);

QDomElement factory=doc.createElement("厂家");

QDomElement brand=doc.createElement("品牌");

QDomElement price=doc.createElement("价格");

QDomElement num=doc.createElement("数量");

QDomElement total=doc.createElement("金额");

//设置文本内容并追加到前节点元素

QDomText text=doc.createTextNode(list.at(0));

factory.appendChild(text);

text=doc.createTextNode(list.at(1));

brand.appendChild(text);

text=doc.createTextNode(list.at(2));

price.appendChild(text);

text=doc.createTextNode(list.at(3));

num.appendChild(text);

text=doc.createTextNode(list.at(4));

total.appendChild(text);

//将厂家、价格等节点追加到哦时间节点

timeEmt.appendChild(factory);

timeEmt.appendChild(brand);

timeEmt.appendChild(price);

timeEmt.appendChild(num);

timeEmt.appendChild(total);

}

//读XML

void DomXML::ReadXML(QString strFilePath,QStringList &fList,QStringList &bList,QStringList &pList,QStringList &nList,QStringList &tList)

{

QFile file(strFilePath);

bool bIsOk=file.open(QIODevice::ReadOnly);

QDateTime date=QDateTime::currentDateTime();

QString strDate=date.toString("yyyy-MM-dd");

if(bIsOk)

{

QDomDocument doc;

bIsOk=doc.setContent(&file);

if(bIsOk)

{

QDomElement root=doc.documentElement();

//是否有子节点

if(root.hasChildNodes())

{

QDomElement lastEmt=root.lastChildElement();

if(lastEmt.attribute("date")==strDate)

{//找到当天日期下所有时间子节点

QDomNodeList list=lastEmt.childNodes();

for(int i=0;i<list.size();++i)

{

QDomNodeList subList=list.at(i).toElement().childNodes();

//厂家

QString factory=subList.at(0).toElement().text();

fList.append(factory);

//品牌

QString brand=subList.at(1).toElement().text();

bList.append(brand);

//价格

QString price=subList.at(2).toElement().text();

pList.append(price);

//数量

QString num=subList.at(3).toElement().text();

nList.append(num);

//金额

QString total=subList.at(4).toElement().text();

tList.append(total);

}

}

else

{

qDebug()<<"没有当天日期";

return ;

}

}

}

}

else

{

cout<<"open file error";

}

}

测试调用部分

mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <QStringList>

#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

QStringList list;

list<<"二汽神龙"<<"毕加索"<<"39"<<"1"<<"20";

DomXML::CreateXML("../demo.xml");

DomXML::AppendXML("../demo.xml",list);

QStringList fList;

QStringList bList;

QStringList pList;

QStringList nList;

QStringList tList;

DomXML::ReadXML("../demo.xml",fList,bList,pList,nList,tList);

for(int i=0;i<fList.size();++i)

{

QString str=QString("%1:%2:卖出了%3,单价:%4总价:%5")

.arg(fList.at(i))

.arg(bList.at(i))

.arg(nList.at(i))

.arg(pList.at(i))

.arg(tList.at(i));

qDebug()<<str.toUtf8().data();

}

}

MainWindow::~MainWindow()

{

delete ui;

}

39XML文档类的更多相关文章

  1. C++MFC编程笔记day05 文档类-单文档和多文档应用程序

    文档类 1 相关类    CDocument类-父类是CCmdTarget类,所以,文档类也能够处理菜单等               命令消息. 作用保存和管理数据.    注意事项:怎样解决断言错 ...

  2. as3 文档类引用

    /**文档类引用**/ public static var main:CoverMain; public function CoverMain() { main=this; }

  3. VS2010 MFC中 在FormView派生类里获取文档类指针的方法

    经过苦苦调试,今晚终于解决了一个大问题. 我想要实现的是:在一个FormView的派生类里获取到文档类的指针. 但是出现问题:试了很多办法,始终无法获取到. 终于,此问题在我不懈地调试加尝试下解决了. ...

  4. 如何通过AS3加载外部SWF文件,调用外部文件文档类的方法?

    一个Flash中通过AS3代码的Loader对象加载另一个SWF文件,并访问其中的文档类中的方法. 简单示例: 主文件:Main.fla, Main.as 被调用的文件:called.swf, Cal ...

  5. MFC框架类、文档类、视图类相互访问的方法

    1.获取应用程序指针 CMyApp* pApp=(CMyApp*)AfxGetApp(); 2.获取主框架指针 CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针 CMainFr ...

  6. C#通过调用WinApi打印PDF文档类,服务器PDF打印、IIS PDF打印

    其他网站下载来的类,可以用于Winform.Asp.Net,用于服务器端PDF或其他文件打印. 直接上代码: using System; using System.Collections.Generi ...

  7. Swagger-UI 基于REST的API测试/文档类插件

    现在多数的项目开发中,网站和移动端都需要进行数据交互和对接,这少不了使用REST编写API接口这种场景.例如我目前的工作,移动端交由了另一团队开发,不同开发小组之间就需要以规范和文档作为标准和协作基础 ...

  8. ES系列四、ES6.3常用api之文档类api

    1.Index API: 创建并建立索引 PUT twitter/tweet/ { "user" : "kimchy", "post_date&quo ...

  9. VC2010 MFC文档类菜单快捷键无法加载问题

    问题1. 在菜单中项中输入&Run\tF5, 运行显示Run,而不是Run F5. 问题2.在Accelerator中绑定了快捷键,但运行程序不起作用. 以上2中问题在VC++2008和VC+ ...

随机推荐

  1. php 如何得到不含前导0的时分秒

    通常我们获取时分秒是用 date("H:i:s") ,得到的效果是这样的 而如果想获取不含前导0的时分秒的话,就需要把前导0去掉. 如何去掉呢?我们来分析一下,07变7,20还是2 ...

  2. nodejs搭建简单web服务器!!

    var http = require("http"), url = require("url"), path = require("path" ...

  3. 在线学习angularjs2

    官网给的学习教程(需要FQ) http://campus.codeschool.com/courses/accelerating-through-angular-2/contents

  4. Android 使用RadioGroup和RadioButton实现单选效果

    RadioButton和CheckBox的区别:CheckBox选中之后可以直接取消,RadioButton选中之后不能直接取消,所以一般情况下不建议单独使用.1.RadioGroup:RadioBu ...

  5. VS2013快捷键

    这个好用,先放这两个 组合键“Ctrl+Enter”:在当前行的上面插入一个空行:  组合键“Ctrl+Shift+Enter”:在当前行的下面插入一个空行.

  6. android基础---->发送和接收短信

    收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.今天我们开始自己创建一个简单的发送和接收短 ...

  7. MQTT的学习研究(八)基于HTTP DELETE MQTT 订阅消息服务端使用

    HTTP DELETE 订阅主题请求协议和响应协议http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzau ...

  8. Android 测量调用方法耗时的方法

    private long mDrawnRealTime; 起点:mDrawnRealTime = SystemClock.elapsedRealtime(); 终点: long delay = Sys ...

  9. nginx代理学习

    一.windows下nginx代理ftp服务器 我所在的开发环境里,nginx和ftp在同一台服务器. ftp根目录: nginx的配置: 在nginx.conf中加入: server { liste ...

  10. elk日志分析与发掘深入分析

    elk日志分析与挖掘深入分析 1 为什么要做日志采集? 2 挖财自己的日志采集和分析体系应该怎么建? 2.1 日志的采集 2.2 日志的汇总与过滤 2.3 日志的存储 2.4 日志的分析与查询 3 需 ...