1:创建一个文件对象(QFile),创建文件对象的时候可能会出现两种情况,一是文件已存在,二是
文件不存在,文件存在则我们可以直接拿来使用,不存在则需要创建
2:创建文件之后则是打开文件,并且指定文件的读写权限
3:创建一个QDomDocument文档对象
4:创建一个XML头部格式
5:将前面创建的XML头部格式追加到前面创建的XML文档对象卖册中
6:创建根节点
7:将创建的根节点追加到前面创建的XML文档对象中
8:创建一个文本流并且将它和我们前面创建的文件对象关联起来
9:将文本流中的内容保存到我们前面创建的QDomDocument对象中,并且指定文档以几个字符缩进
10:在创建完成后,假如没有其它的 *** 作则将文件对象关闭
/***
void DocXML::createXML(QString file_path)
{
QFile file(file_path)//关联文件名字
if(true==file.exists())//如果存在不创建袜昌
{
cout<<"文件已经存在"
return
}
else
{
//不存在创建
//只写文件
bool isOK=file.open(QIODevice::WriteOnly)
if(true==isOK)//如果打开成功
{
//创建XML文档
QDomDocument doc
//创建XML头部格式
QDomProcessingInstruction ins
ins=doc.createProcessingInstruction("xml","version=\'1.0\' encoding=\'utf-8\'")
//追加元素
doc.appendChild(ins)
//创建根节点
QDomElement root=doc.createElement(QStringLiteral("日销售清单"))
//QDomElement root=doc.createElement("helloworld")
//追加
doc.appendChild(root)
//保存
QTextStream stream(&file)//和文本流关联文件
doc.save(stream,4)//保存文件并且以4个字符的方式缩进
//关闭文件
file.close()
}
else
{
cout<<"writeOnly error"
}
}
}
**/
向一个已存在的XML文件对象中添加节点和元素:
1:打开一个已存在的XML文档,并将打开函数的返回值保存下来
2:在返回值为真的情况下,我们将文件和一个QDomDocument关联起来,将关联函数的返回值保存起来
3:在关联函数的返回值为真的情况下,我们可以将前面打开的文件对象关闭
4:获取根节点元素
5:获取当前时间
6:将我们获取的当前日期转换为字符串
7:判断我们前面获取的根节点下面有没有子节点
8:在没有的情况下,我们创建一个日期子节点
9:创建一个属性值
10:设置前面创建的属性值
11:将我们创建的日期节点和我们前面创建的属性关联起来
12:将我们创建的日期节点追加到根节点下
13:写入有效数据
13.1:获取当前时间
13.2:将获取的时间转换为字符串
13.3:创建中好宏一个新的时间节点元素
13.4:创建一个属性
13.5:给我们创建的属性设置值
13.6:将时间节点元素和我们前面创建的时间节点关联
13.7:将时间节点追加到最开始创建的那个日期节点后面
13.8:创建节点里的元素
13.9:将元素和节点关联
13.10:将新的节点追加到父节点哪里
void DocXML::appendXML(QString file_Path, QStringList list)
{
QFile file(file_Path)
bool isOK=file.open(QIODevice::ReadOnly)
if(true==isOK)
{
//文件和xml广联
QDomDocument doc
isOK=doc.setContent(&file)
if(isOK)
{
file.close()//关联成功后关闭文件
//获取根节点元素
QDomElement root=doc.documentElement()
//获取当前时间
QDateTime date=QDateTime::currentDateTime()
//将获取的时间装换位字符串
QString dateStr=date.toString("yyyy-MM-dd")//2021-01-08
//判断根节点下有没有子节点
if(root.hasChildNodes())//有子节点
{
}
else//没有子节点
{
//创建日期子节点
QDomElement dataEmt=doc.createElement(QStringLiteral("日期"))
//创建date属性
QDomAttr dataAttr=doc.createAttribute("date")
//设置属性的值
dataAttr.setNodeValue(dateStr)
//把节点和属性关联
dataEmt.setAttributeNode(dataAttr)
//把日期节点追加到根节点下
root.appendChild(dataEmt)
//写有效数据
writeXML(doc,dataEmt,list)
}
//保存文件
isOK=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 DocXML::writeXML(QDomDocument &doc, QDomElement &root, QStringList &list)
{
//获取当前时间
QDateTime tiem=QDateTime::currentDateTime()
//将获取的时间装换位字符串
QString timeStr=tiem.toString("hh-mm-ss")//16:05:03
//创建时间节点元素
QDomElement timeEmt=doc.createElement(QStringLiteral("时间"))
//创建属性
QDomAttr timeAtrr=doc.createAttribute("time")
//给属性设置值
timeAtrr.setNodeValue(timeStr)
//时间节点元素和时间节点关联
timeEmt.setAttributeNode(timeAtrr)
//把时间节点追加到日期节点后面
root.appendChild(timeEmt)
//创建节点里的元素
QDomElement factory=doc.createElement(QStringLiteral("厂家"))
QDomElement brand=doc.createElement(QStringLiteral("品牌"))
QDomElement price=doc.createElement(QStringLiteral("报价"))
QDomElement number=doc.createElement(QStringLiteral("数量"))
QDomElement total=doc.createElement(QStringLiteral("金额"))
//将元素和节点关联
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))
number.appendChild(text)
text=doc.createTextNode(list.at(4))
total.appendChild(text)
//将新的节点追加到父节点哪里
timeEmt.appendChild(factory)
timeEmt.appendChild(brand)
timeEmt.appendChild(price)
timeEmt.appendChild(number)
timeEmt.appendChild(total)
}
qt中使用open函数打开xml文件失败解决方法:1、关闭所有word文档,右键单击开始按钮。
2、右键开始菜单点击运行。
3、运粗中行中输入“%userprofile%\ApplicationData\Microsoft\DocumentBuildingBlocks\1033后回车或点击确定”枯告。
4、找到BuildingBlocks.dotx文件,右键单击文件,选择重命名。
5、将文件扩展名修改成OLD。
6、没凳明出现扩展名提示,点击是即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)