qt使用QDomDocument读写xml文件

news2024/9/30 11:51:02

在使用QDomDocument读写xml之前需要在工程文件添加:
QT += xml

1.生成xml文件

void createXml(QString xmlName)
{
	QFile file(xmlName);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text))
        return false;
    QDomDocument doc;
    QDomProcessingInstruction instruction; //添加处理命令
    instruction=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
    doc.appendChild(instruction);
/*
<bookstore>
	<book category="c++">
		<price>98</price>
	</book>
	<book category="语文">
		<price>100</price>
	</book>
</bookstore>
*/
	QDomElement root = doc.createElement("bookstore");
    doc.appendChild(root);

	QDomElement book = doc.createElement("book");
    book.setAttribute("category", "C++");	//生成category节点
    root.appendChild(book);
    QDomElement price= doc.createElement("price");
    book.appendChild(price);
    QDomText text = doc.createTextNode("98");
    price.appendChild(text);
	
	book = doc.createElement("book");
	book.setAttribute("category", QString::fromLocal8Bit("语文"));
    root.appendChild(book);
    price= doc.createElement("price");
    book.appendChild(price);
    text = doc.createTextNode("100");
    price.appendChild(text);
    
	QTextStream stream(&file);
	stream.setCodec("UTF_8");
	doc.save(stream,4,QDomNode::EncodingFromTextStream);
	file.close();
}

在这里插入图片描述
2.读取xml文件

void loadXml(QString xmlName)
{
	QFile file(xmlName);
    if(!file.open(QFile::ReadOnly | QFile::Text))
    {
        return;
    }

    QString strError;
    int errorLine;
    int errorColumn;
    QDomDocument doc;
    if(!doc.setContent(&file, false, &strError, &errorLine, &errorColumn)){
        return;
    }
    QDomElement root = doc.documentElement();
    if(root.tagName() == "bookstore")
    {
		QDomNode book = root.firstChild();
		while(!book.isNull())
		{
			if(book.toElement().tagName() == "book")
			{
				QString str = book.toElement().attribute("category");	//获取category属性内容
				qDebug()<<str;
				QDomNode node = book.firstChild();
				while(!node.isNull())
				{
					if(node.toElement().tagName() == "price")
					{
						QString price = node.toElement().text();
						qDebug()<<price;
					}
					node = node.nextSibling();
				}
			}
			book = book.nextSibling();
		}
	}
}

void appendXml(QDomDocument &doc,QDomElement &root)
{

    QDomElement book = doc.createElement("book");
    book.setAttribute("category", "C++");	//生成category节点
    root.appendChild(book);

    QDomElement price= doc.createElement("price");
    book.appendChild(price);
    QDomText text = doc.createTextNode("98");
    price.appendChild(text);

    book = doc.createElement("book");
    book.setAttribute("category", QString::fromLocal8Bit("语文"));
    root.appendChild(book);

    price= doc.createElement("price");
        text = doc.createTextNode("100");
        price.appendChild(text);
    book.appendChild(price);
}


void openFileWriteXML(QString xmlPath)
{
    QFile file(xmlPath);
    if(!file.open(QFile::ReadOnly | QFile::Text))
    {
        return;
    }

    QString strError;
    int errorLine;
    int errorColumn;
    QDomDocument doc;
    if(!doc.setContent(&file, false, &strError, &errorLine, &errorColumn)){
        return;
    }
    QDomElement root = doc.documentElement();


}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2179544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

隆道携手黑龙江省中小企业协会助力区域企业数字化转型

9月28日&#xff0c;隆道公司总裁吴树贵出席“2024年黑龙江省中小企业协会副会长扩大会议暨数字化转型专题报告会”并做主题发言&#xff0c;分享了龙江惠企商城建设情况和供应链数字化转型实践经验。会上&#xff0c;隆道公司与黑龙江省中小企业协会签订了战略合作协议&#x…

SOLIDWORKS 2025基于浏览器角色的新功能:如何简化设计流程?

在2025版本中&#xff0c;SOLIDWORKS引入了一系列基于浏览器角色的新功能&#xff0c;本文将深入探讨SOLIDWORKS 2025的这些新增功能&#xff0c;看看它们是如何帮助工程师简化工作流程、增强用户体验的。 SOLIDWORKS 2025 1从多方面定义工作流程 • 根据您的需求使用全新的…

ACM MM 2024中有哪些值得关注的Diffusion Models相关的论文?

Diffusion Models专栏文章汇总:入门与实战 前言:ACM MM 2024作为多模态领域的顶级会议,已经放出所有接受的论文。这次的MM又是Diffusion Models的盛会,非常多值得关注的最新论文,这篇博客将一一介绍。 COMD: Training-free Video Motion Transfer With Camera-Object Moti…

Redis哨兵模式的搭建以及配置参数简介

原理 Redis哨兵模式是一种用于在Redis主从复制环境中进行高可用性监控和故障恢复的机制。该模式引入了一个或多个哨兵节点&#xff0c;这些节点负责监控Redis服务器的状态&#xff0c;并在主节点发生故障时切换为新的主节点。 哨兵节点的工作原理如下&#xff1a; 1、哨兵节点…

基于SpringBoot的诗词学习网站的设计与实现

目录 毕设制作流程功能和技术介绍系统实现截图开发核心技术介绍&#xff1a;使用说明开发步骤编译运行代码执行流程核心代码部分展示可行性分析软件测试详细视频演示源码获取 毕设制作流程 &#xff08;1&#xff09;与指导老师确定系统主要功能&#xff1b; &#xff08;2&am…

通信工程学习:什么是GOCC地面操作控制中心、SOCC卫星操作控制中心

GOCC地面操作控制中心&SOCC卫星操作控制中心 GOCC&#xff08;Ground Operation Control Center&#xff0c;地面操作控制中心&#xff09;和SOCC&#xff08;Satellite Operations Control Center&#xff0c;卫星操作控制中心&#xff09;是卫星通信系统中至关重要的组成…

GitHub下载MY-SITE

1、GitHub下载my-site 解压 打开项目 ApiOperation swagger日志的 七牛云-云平台 dao和model统称为pojo--实体类 删除docker 2、创建数据库 执行sql 3、链接数据库 扫描dao曾的包 46、鸡汤分析开源项目_哔哩哔哩_bilibili 修改yaml 启动 http://localhost:8089/a…

如何在 Kubernetes 上部署和配置开源数据集成平台 Airbyte?

在 Kubernetes 上部署和配置 Airbyte 是一个复杂但非常有价值的过程&#xff0c;特别是对于需要强大数据集成和数据处理能力的企业或团队。Airbyte 是一个开源的数据集成平台&#xff0c;允许用户从各种来源提取数据并加载到目标存储中。其强大的插件系统支持多种数据源与目标&…

FPGA实现PCIE视频采集转SDI输出,基于GTX+XDMA中断架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博已有的 SDI 编解码方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存SDI视频编码之-->RGB转BT1120SDI视频编码之-->SMPTE SD/HD…

python5_basecurd

基础增删改查 # 定义一个字典来存储数据 data {}def add(key, value):"""添加数据:param key: 键:param value: 值"""if key not in data:data[key] valueprint(f"添加成功&#xff1a;{key} -> {value}")else:print(f"键已…

【12月IEEE出版* 镇江 】第九届清洁能源与发电技术国际学术会议(CEPGT 2024)

2024 9th International Conference on Clean Energy and Power Generation Technology (CEPGT 2024) 第九届清洁能源与发电技术国际学术会议&#xff08;CEPGT 2024&#xff09;&#xff0c;将于2024年12月27-29日在江苏镇江举办。高效清洁新能源的研究和应用是我国现阶段最主…

非关键尺寸的失效模式和效应分析(FMEA)是否有必要进行?

在追求极致的过程中&#xff0c;一个看似不起眼的细节——非关键尺寸的失效模式和效应分析&#xff08;FMEA&#xff09;&#xff0c;却常常被忽视或低估其重要性。本文&#xff0c;深圳天行健企业管理咨询公司旨在分享为何在非关键领域&#xff0c;FMEA同样不可或缺&#xff0…

【LeetCode】动态规划—221. 最大正方形(附完整Python/C++代码)

动态规划—221. 最大正方形 前言题目描述基本思路1. 问题定义:2. 理解问题和递推关系:3. 解决方法:3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化:5. 小总结: 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 前言 在二维矩阵中寻找最大正方形的问题是动…

mysql笔记10(高级部分--跟数据库管理有关)

文章目录 一、视图(view)1. 作用2. CRUD--跟表操作几乎相同① 创建② 显示视图③ 查看视图相关详细信息④ 删除视图⑤ 更新视图 3. 视图算法① 创建视图时指定视图算法② 后期navicat里修改视图算法③ 注 二、事务(transaction)1. 事务的提出2. 举例理解① commit -- 一起执行②…

CSS宽度和高度

CSS 尺寸属性指的就是元素的宽度和高度属性&#xff0c;虽然说非常简单&#xff0c;但却是必须掌握的技能。CSS 中提供了 width、height、max-width、min- width、max-height 和 min-height 等几个属性来设置元素的宽度和高度&#xff0c;这些元素使用起来非常简单&#xff0c;…

采购订单管理:如何驱动业务效率和增长

采购订单是一份具有法律约束力的文件&#xff0c;明确了买方在未来特定日期从供应商处购买商品或服务的意图。 该文件对于买卖双方均具有重要价值。对于买方而言&#xff0c;采购订单有助于其进行未来数月的财务规划&#xff0c;明确资金的支出时间点。对于供应商而言&#x…

如何快速建立自己的异地互联的远程视频监控系统,通过web浏览器可以直接查看公网上的监控视频(上)

目录 一、需求 二、方案 2.1、计划方案 2.2、实施准备 2.2.1所需配置的产品和服务 2.2.1.1云主机 &#xff08;1&#xff09;选择云平台 &#xff08;2&#xff09;配置云服务器 2.2.2.2视频监控平台软件 &#xff08;1&#xff09;视频监控平台软件 &#xff08;2&am…

袋鼠云数据资产平台:数据模型标准化建表重构升级

数据模型是什么&#xff1f;简单来说&#xff0c;数据模型是用来组织和管理数据的一种方式。它为构建高效且可靠的信息系统提供了基础&#xff0c;不仅决定了如何存储和管理数据&#xff0c;还直接影响系统的性能和可扩展性。 想要建立一个良好的数据模型&#xff0c;设计时需…

【从0开始搭建微服务并进行部署】SpringBoot+dubbo+zookeeper

文章目录 说明环境搭建创建项目父模块设置子模块 dubbo-api子模块 dubbo-provider子模块 dubbo-consumer测试项目 docker部署项目完整项目地址 说明 jdk1.8SpringBoot2.x低版本dubbo&#xff1a;请查看之前教程【微服务】SpringBootDubboZooKeeper 实战 关于本教程将采用jdk1…

springboot整合Freemarker动态生成JSON

什么是Freemarker 链接: Freemarker介绍和语法 FreeMarker 是一款模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c; 并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&#xff0c;源代码等)的通用工具。 它不是面向最终用户的&#xff0c…