xml
<info><stu id&#61;"1"><name>mikename><sex>femalesex><score>18score>stu><stu id&#61;"2"><name>jackname><sex>malesex><score>20score>stu>
info>
实现如下效果&#xff1a;
<?xml version&#61;&#39;1.0&#39; encoding&#61;&#39;utf-8&#39;?>
<日销售清单><日期 date&#61;"2020-05-19"><时间 time&#61;"10-30-58"><厂家>二汽神龙</厂家><品牌>毕加索</品牌><报价>39</报价><数量>1</数量><金额>39</金额></时间></日期>
</日销售清单>
直接上代码&#xff1a;
domxml.h
#ifndef DOMXML_H
#define DOMXML_H
#include
#include
#include
#include class DomXml
{
public:DomXml();static void createXML(QString filePath);static void appendXML(QString filePath,QStringList list);static void writeXML(QDomDocument &doc,QDomElement &root,QStringList list);static void readXML(QString filePath,QStringList &fList,QStringList &bList,QStringList &pList,QStringList &nList,QStringList &tList);
};#endif
domxml.cpp
#include "domxml.h"
#include
#include
#include
#include
#include
#include
#include #define cout qDebug() <<"[" <<__FILE__ <<":" <<__LINE__ <<"]"DomXml::DomXml()
{}
void DomXml::createXML(QString filePath)
{QFile file(filePath);if(true &#61;&#61; file.exists()){cout << "文件已经存在";return;}else{bool isOk &#61; file.open(QIODevice::WriteOnly);if(true &#61;&#61; isOk){QDomDocument doc;QDomProcessingInstruction ins;ins &#61; doc.createProcessingInstruction("xml","version&#61;\&#39;1.0\&#39; encoding&#61;\&#39;utf-8&#39;");doc.appendChild(ins);QDomElement root &#61; doc.createElement("日销售清单");doc.appendChild(root);QTextStream stream(&file);doc.save(stream,4);file.close();}else{cout << "WriteOnly error!";return;}}}void DomXml::appendXML(QString filePath, QStringList list)
{QFile file(filePath);bool isOk &#61; file.open(QIODevice::ReadOnly);if(true &#61;&#61; isOk){QDomDocument doc;isOk &#61; doc.setContent(&file);if(isOk){file.close();QDomElement root &#61; doc.documentElement();QDateTime date &#61; QDateTime::currentDateTime();QString dateStr &#61; date.toString("yyyy-MM-dd");if(root.hasChildNodes()){QDomElement lastEmt &#61; root.lastChildElement();if(lastEmt.attribute("date") &#61;&#61; dateStr){writeXML(doc,lastEmt,list);}else{QDomElement dateEmt &#61; doc.createElement("日期");QDomAttr dateAttr &#61; doc.createAttribute("date");dateAttr.setNodeValue(dateStr);dateEmt.setAttributeNode(dateAttr);root.appendChild(dateEmt);writeXML(doc,dateEmt,list);}}else {QDomElement dateEmt &#61; doc.createElement("日期");QDomAttr dateAttr &#61; doc.createAttribute("date");dateAttr.setNodeValue(dateStr);dateEmt.setAttributeNode(dateAttr);root.appendChild(dateEmt);writeXML(doc,dateEmt,list);}isOk &#61; file.open(QIODevice::WriteOnly);if(isOk){QTextStream stream(&file);doc.save(stream,4);file.close();}}else {cout << "setContent error!";return;}}else {cout <<"ReadOnly error!";}}void DomXml::writeXML(QDomDocument &doc, QDomElement &root, QStringList list)
{QDateTime time &#61; QDateTime::currentDateTime();QString timeStr &#61; time.toString("hh-mm-ss"); QDomElement timeEmt &#61; doc.createElement("时间");QDomAttr timeAttr &#61; doc.createAttribute("time");timeAttr.setNodeValue(timeStr);timeEmt.setAttributeNode(timeAttr);root.appendChild(timeEmt);QDomElement factory &#61; doc.createElement("厂家");QDomElement brand &#61; doc.createElement("品牌");QDomElement price &#61; doc.createElement("报价");QDomElement num &#61; doc.createElement("数量");QDomElement total &#61; doc.createElement("金额");QDomText text &#61; doc.createTextNode(list.at(0));factory.appendChild(text);text &#61; doc.createTextNode(list.at(1));brand.appendChild(text);text &#61; doc.createTextNode(list.at(2));price.appendChild(text);text &#61; doc.createTextNode(list.at(3));num.appendChild(text);text &#61; doc.createTextNode(list.at(4));total.appendChild(text);timeEmt.appendChild(factory);timeEmt.appendChild(brand);timeEmt.appendChild(price);timeEmt.appendChild(num);timeEmt.appendChild(total);}void DomXml::readXML(QString filePath, QStringList &fList, QStringList &bList, QStringList &pList, QStringList &nList, QStringList &tList)
{QFile file(filePath);bool isOk &#61; file.open(QIODevice::ReadOnly);if(true &#61;&#61; isOk){QDomDocument doc;isOk &#61; doc.setContent(&file);if(isOk){file.close();QDomElement root &#61; doc.documentElement();QDateTime date &#61; QDateTime::currentDateTime();QString dateStr &#61; date.toString("yyyy-MM-dd");if(root.hasChildNodes()){QDomElement lastEmt &#61; root.lastChildElement();if(lastEmt.attribute("date") &#61;&#61; dateStr){QDomNodeList list &#61; lastEmt.childNodes();for (int i&#61;0;i<list.size();i&#43;&#43;){QDomNodeList subList &#61; list.at(i).toElement().childNodes();QString factory &#61; subList.at(0).toElement().text();fList.append(factory);QString brand &#61; subList.at(1).toElement().text();bList.append(brand);QString price &#61; subList.at(2).toElement().text();pList.append(price);QString num &#61; subList.at(3).toElement().text();nList.append(num);QString total &#61; subList.at(4).toElement().text();tList.append(total);}}else {cout << "没有当前日期";return;}}}else{cout << "setContentt error";return;}}else{cout <<"ReadOnly error";return;}
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "domxml.h"
#include Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);DomXml::createXML("../demo.xml");QStringList list;list << "二汽神龙" << "毕加索" << "39" << "1" << "39";DomXml::appendXML("../demo.xml",list);QStringList fList,bList,pList,nList,tList;DomXml::readXML("../demo.xml",fList,bList,pList,nList,tList);for (int i &#61; 0;i < fList.size(); i&#43;&#43;){QString str &#61; QString("%1:%2:卖出了%3&#xff0c;单价&#xff1a;%4&#xff0c;总价&#xff1a;%5").arg(fList.at(i)).arg(bList.at(i)).arg(pList.at(i)).arg(nList.at(i)).arg(tList.at(i));qDebug() << str;}
}Widget::~Widget()
{delete ui;
}
实用技巧
- 新加入的类或者模块&#xff0c;如果方法或类不显示高亮&#xff0c;
close All
然后重新打开一下即可刷新