39XML文档类
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文档类的更多相关文章
- C++MFC编程笔记day05 文档类-单文档和多文档应用程序
文档类 1 相关类 CDocument类-父类是CCmdTarget类,所以,文档类也能够处理菜单等 命令消息. 作用保存和管理数据. 注意事项:怎样解决断言错 ...
- as3 文档类引用
/**文档类引用**/ public static var main:CoverMain; public function CoverMain() { main=this; }
- VS2010 MFC中 在FormView派生类里获取文档类指针的方法
经过苦苦调试,今晚终于解决了一个大问题. 我想要实现的是:在一个FormView的派生类里获取到文档类的指针. 但是出现问题:试了很多办法,始终无法获取到. 终于,此问题在我不懈地调试加尝试下解决了. ...
- 如何通过AS3加载外部SWF文件,调用外部文件文档类的方法?
一个Flash中通过AS3代码的Loader对象加载另一个SWF文件,并访问其中的文档类中的方法. 简单示例: 主文件:Main.fla, Main.as 被调用的文件:called.swf, Cal ...
- MFC框架类、文档类、视图类相互访问的方法
1.获取应用程序指针 CMyApp* pApp=(CMyApp*)AfxGetApp(); 2.获取主框架指针 CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针 CMainFr ...
- C#通过调用WinApi打印PDF文档类,服务器PDF打印、IIS PDF打印
其他网站下载来的类,可以用于Winform.Asp.Net,用于服务器端PDF或其他文件打印. 直接上代码: using System; using System.Collections.Generi ...
- Swagger-UI 基于REST的API测试/文档类插件
现在多数的项目开发中,网站和移动端都需要进行数据交互和对接,这少不了使用REST编写API接口这种场景.例如我目前的工作,移动端交由了另一团队开发,不同开发小组之间就需要以规范和文档作为标准和协作基础 ...
- ES系列四、ES6.3常用api之文档类api
1.Index API: 创建并建立索引 PUT twitter/tweet/ { "user" : "kimchy", "post_date&quo ...
- VC2010 MFC文档类菜单快捷键无法加载问题
问题1. 在菜单中项中输入&Run\tF5, 运行显示Run,而不是Run F5. 问题2.在Accelerator中绑定了快捷键,但运行程序不起作用. 以上2中问题在VC++2008和VC+ ...
随机推荐
- 设置jQuery validate插件错误提示位置
参照上一篇bootstrap布局注册表单 使用校验插件默认位置显示提示信息,发现错误提示信息换行了,由于增加了提示信息,表单显示高度也增加了,如下 默认提示信息位置代码为 将错误提示设置其显示在右边, ...
- VR室内定位系统小结
一.写在开始之前 不管是HTC 的Vive还是OC的CV1,都说明VR 定位设备和手柄都会成为未来VR的发展趋势. VR目前关键就是体验,全身心的投入,身临其境的感觉. 不能总玩着玩着,出戏了.这肯定 ...
- 腾讯云大数据套件Hermes-MR索引插件使用总结
版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/121 来源:腾云阁 https://www.qclou ...
- 搭建FastDFS
---恢复内容开始--- FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用Fast ...
- vue脚手架一
一准备: 在F:/xampp/htdocs/文件夹下检查: 1,node -v; 2,npm -v; 3,淘宝镜像(选装): npm install -g cnpm --registry= https ...
- C# TOKEN的保存与验证
Token主要为了防止非本页数据的提交,防止重复提交. /** * * 保存TOKEN信息 * */ public void saveToken() { //此处生成md5串 string md5 = ...
- ios 的ASIHTTPRequest学习
发起一个同步请求 同步意为着线程阻塞,在主线程中使用此方法会使应用Hang住而不响应任何用户事件.所以,在应用程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替(下面会讲到). - (I ...
- Linux系统 centOS 更换软件安装源
阿里云Linux安装软件镜像源阿里云是最近新出的一个镜像源.得益与阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源.阿里云Linux安装镜像源地址:http://mirrors.aliyun.c ...
- jquery插件方式实现table查询功能
1.写插件部分,如下: ;(function($){ $.fn.plugin = function(options){ var defaults = { //各种属性,各种参数 } var optio ...
- 在github上参与开源项目日常流程
转载自:http://blog.csdn.net/five3/article/details/9307041 1. 注册帐号 打开https://github.com/,填写注册信息并提交. 2. 登 ...