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. CCNet持续集成编译中SVN问题解决

    SVN问题 BUILD EXCEPTION Error Message: ThoughtWorks.CruiseControl.Core.CruiseControlException: Source ...

  2. 【RF库Collections测试】Dictionary Should Not Contain Value

    Name:Dictionary Should Not Contain ValueSource:Collections <test library>Arguments:[ dictionar ...

  3. mybatis之parameterType传递多个参数

    当在查询的时候需要传入多个参数的时候该怎么办呢: 1,封装成一个Model对象,底层HashMap还是一个 User user=new User(); user.setUserName("z ...

  4. solr学习笔记-linux下配置solr(转)

    本文地址: http://zhoujianghai.iteye.com/blog/1540176 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Jav ...

  5. IOS中数组的使用(NSArray, NSSet, NSDictionary)

    一.Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序集合(数组)NSSet 用于对象无序集合(集合) NSDic ...

  6. 【MySQL】查询时强制区分大小写的方法

    MySQL默认的查询也不区分大小写.但作为用户信息,一旦用户名重复,又会浪费很多资源.再者,李逵.李鬼的多起来,侦辨起来很困难.要做到这一点,要么在建表时,明确大小写敏感(字段明确大小写敏感) sql ...

  7. 封装JDBC工具类

    JDBC连接数据库基本的步骤是固定的,这样就可以考虑封装一个工具类来简化数据库操作. 封装时用到了Java中的properties配置文件,是以一种键值对的形式存在的,可以把连接数据库要动态的信息保存 ...

  8. sencha touch 入门系列 (八)sencha touch类系统讲解(下)

    接着上一讲,我们通过一组代码来讲解一下st的类的一些属性: Ext.define("MyConfig",{ config:{ website:"http://127.0. ...

  9. Mac - 苹果电脑mac系统释放硬盘空间方法汇总

    硬盘空间是大家最头痛的一个问题,大家在硬盘空间变小的时候怎么腾空间的呢?下面为大家分享7个mac系统释放空间的高级方法,大家赶紧来收了! mac系统释放硬盘空间方法: 方法一:删除Emacs--可以节 ...

  10. thinkphp---数据表更新字段开发模式可更新生产模式不能更新!

    这里认为是坑的主要原因:这个问题我调试了一天,才发现是缓存的问题. 问题原因:在做一thinkphp的项目,在后期要进行修改.修改的时候,数据表里面添加了两个字段,然后前台修改模板,将添加的字段提交上 ...