栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Qt知识点梳理 —— XML文件操作,java算法入门书籍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Qt知识点梳理 —— XML文件操作,java算法入门书籍

XML文档介绍

XML文档结构

Qt操作XML文档

项目配置

新建元素

追加元素

移除元素

更新元素

判断元素存在

读取所有元素

读取子节点

读取一个元素的值

总结

执行效果

项目源码

开发环境


XML文档介绍


XML(Extensible Markup Language),可扩展标记语言;

是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。(维基百科)


XML文档结构


light val

25

第一行:XML文档声明;它定义 XML 的1.0版本,以及UTF-8编码;

第一行:XML文档根元素,在文档中唯一;

第三行:XML文档元素;


Qt操作XML文档


项目配置

.pro文件里面添加QT += xml

QDomElement类

Qt中,QDomElement表示DOM树中的一个元素;

新建元素

写入第一个元素前,

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

需要新建一个文档,并且写入XML头部,即声明;

使用QDomdocument写入头部:

QDomdocument doc;

//写入xml头部

QDomProcessingInstruction instruction; //添加处理命令

instruction=doc.createProcessingInstruction(“xml”,"version=“1.0” encoding=“UTF-8"”);

doc.appendChild(instruction);

添加根节点:

//添加根节点

QDomElement root=doc.createElement(“params”);

doc.appendChild(root);

添加第一个子节点及其子元素:

//添加第一个子节点及其子元素

QDomElement book=doc.createElement(nodename);

QDomElement title=doc.createElement(itemname); //创建子元素

QDomText text; //设置括号标签中间的值

text=doc.createTextNode(itemvalue);

book.appendChild(title);

title.appendChild(text);

root.appendChild(book);

再使用QTextStream文件流写入到文档:

//输出到文件

QTextStream out_stream(&file);

doc.save(out_stream,4); //缩进4格

file.close();

追加元素

同新建元素同样的套路,如下:

bool XMLUtil::XmlAdd(QString filename, QString nodename, QString itemname, QString itemvalue)

{

//打开文件

QFile file(filename); //相对路径、绝对路径、资源路径都可以

if(!file.open(QFile::ReadOnly))

return false;

//增加一个一级子节点以及元素

QDomdocument doc;

if(!doc.setContent(&file))

{

file.close();

return false;

}

file.close();

QDomElement root=doc.documentElement();

QDomElement book=doc.createElement(nodename);

QDomElement title=doc.createElement(itemname);

QDomText text;

text=doc.createTextNode(itemvalue);

title.appendChild(text);

book.appendChild(title);

root.appendChild(book);

if(!file.open(QFile::Writeonly|QFile::Truncate)) //先读进来,再重写,如果不用truncate就是在后面追加内容,就无效了

return false;

//输出到文件

QTextStream out_stream(&file);

doc.save(out_stream,4); //缩进4格

file.close();

return true;

}

移除元素

bool XMLUtil::XmlRemove(QString filename, QString nodename, QString itemname)

{

//打开文件

QFile file(filename); //相对路径、绝对路径、资源路径都可以

if(!file.open(QFile::ReadOnly))

return false;

//删除一个一级子节点及其元素,外层节点删除内层节点于此相同

QDomdocument doc;

if(!doc.setContent(&file))

{

file.close();

return false;

}

file.close(); //一定要记得关掉啊,不然无法完成操作

QDomElement root=doc.documentElement();

QDomNodeList list=doc.elementsByTagName(nodename); //由标签名定位

for(int i=0;i

{

QDomNode node=list.at(i).firstChild();

if(node.nodeName() == itemname) //以属性名定位,类似于hash的方式,warning:这里仅仅删除一个节点,其实可以加个break

root.removeChild(list.at(i));

}

if(!file.open(QFile::Writeonly|QFile::Truncate))

return false;

//输出到文件

QTextStream out_stream(&file);

doc.save(out_stream,4); //缩进4格

file.close();

return true;

}

更新元素

void XMLUtil::XmlUpdate(QString filename, QString nodename, QString itemname, QString itemvalue)

{

//打开文件

QFile file(filename); //相对路径、绝对路径、资源路径都可以

if(!file.open(QFile::ReadOnly))

return;

//更新一个标签项,如果知道xml的结构,直接定位到那个标签上定点更新

//或者用遍历的方法去匹配tagname或者attribut,value来更新

QDomdocument doc;

if(!doc.setContent(&file))

{

file.close();

return;

}

file.close();

QDomElement root=doc.documentElement();

QDomNodeList list=root.elementsByTagName(nodename);

for(int i=0;i

{

QDomNode node=list.at(i).firstChild();

if(node.nodeName() == itemname)

{

QDomNode oldnode=node.firstChild(); //标签之间的内容作为节点的子节点出现

node.firstChild().setNodevalue(itemvalue);

QDomNode newnode=node.firstChild();

node.replaceChild(newnode,oldnode);

}

}

if(!file.open(QFile::Writeonly|QFile::Truncate))

return;

//输出到文件

QTextStream out_stream(&file);

doc.save(out_stream,4); //缩进4格

file.close();

}

判断元素存在

bool XMLUtil::XmlItemExist(QString filename, QString nodename, QString itemname)

{

//打开文件

QFile file(filename); //相对路径、绝对路径、资源路径都可以

if(!file.open(QFile::ReadOnly))

return false;

//更新一个标签项,如果知道xml的结构,直接定位到那个标签上定点更新

//或者用遍历的方法去匹配tagname或者attribut,value来更新

QDomdocument doc;

if(!doc.setContent(&file))

{

file.close();

return false;

}

file.close();

QDomElement root=doc.documentElement();

QDomNodeList list=root.elementsByTagName(nodename);

for(int i=0;i

{

QDomNode node=list.at(i).firstChild();

if(node.nodeName() == itemname)

{

file.close();

return true;

}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/687092.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号