C++ 实现以xml的格式写入文件

C++ XML类
该类主要将xml中的标签分为两类,无内容标签统一称为父标签,有内容的就以键值对的方式直接输出。
后面可能会优化通过函数参数的方式管控层级关系,现在是通过类里自动记录层级深度来表示的。

#include <fstream>
#include <string>
#include <iostream>
#include <map>class XmlWriter {
private:std::ofstream m_file;public:XmlWriter(const std::string& filename) {m_file.open(filename.c_str());if (!m_file) {std::cout << "" << std::endl;}m_file << "<?xml version=\"1.0\" encoding = \"UTF-8\"?> \n";depth = 0;}~XmlWriter() {if (m_file) {m_file.close();}}void addParentElement(const std::string& parentLable = "") {if (!parentLable.empty()) {if (depth) {for (int i = 0; i < depth; i++)m_file << "  ";}m_file << "<" << parentLable << ">\n";depth++;m_LableMap[depth]= parentLable;}}void addLableKey(const std::string& key, const std::string& value = "") {if (!key.empty() && !value.empty()) {if (depth){for (int i = 0; i < depth; i++)m_file << "  ";}m_file << "<" << key << ">" << value << "</" << key << ">\n";}}void closeParentElement() {if (depth){for (int i = 0; i < depth - 1 ; i++)m_file << "  ";}m_file << "</" << m_LableMap[depth] << ">\n";m_LableMap.erase(depth);depth--;}private:int depth;std::map<int, std::string> m_LableMap;};int main(int argc, char * argv[])
{XmlWriter writer("mateDate.xml");writer.addParentElement("Person");writer.addLableKey("Age", "27"); writer.addLableKey("name", "hzh");writer.addParentElement("friend");writer.addLableKey("name", "zjm");writer.addLableKey("Age", "22");writer.closeParentElement();writer.addLableKey("pay", "30w");writer.closeParentElement();return 0;
}

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

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

相关文章

【QT教程】QT6硬件图形界面编程 QT硬件编程

QT6硬件图形界面编程 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看…

数据结构-二叉树结尾+排序

一、二叉树结尾 1、如何判断一棵树是完全二叉树。 我们可以使用层序遍历的思路&#xff0c;利用一个队列&#xff0c;去完成层序遍历&#xff0c;但是这里会有些许的不同&#xff0c;我们需要让空也进队列。如果队列里到最后只剩下空那么这棵树就是完全二叉树。具体的实现如下…

js 数据格式转换,对象转数组,数组转对象

1.对象转数组 // 对象obj转换成数组格式 let obj { orgCode:分局编码, alertId:告警ID, name:告警名称 } let arr [] for(let key in obj) { console.log(11,key,obj[key]); // 定义一个对象&#xff0c;赋值 let o { id: key, // key是obj对象的键值 label: obj[key] …

学习Vue 3.0中的onMounted和onUnmounted钩子函数

学习Vue 3.0中的onMounted和onUnmounted钩子函数 一、什么是onMounted和onUnmounted&#xff1f;二、如何使用onMounted和onUnmounted&#xff1f;1、使用onMounted2、使用onUnmounted 三、总结 一、什么是onMounted和onUnmounted&#xff1f; Vue 3.0带来了许多令人兴奋的新特…

Modal h函数写法

Modal h函数写法 if (res.data.flag) {const ocapWarn res.data.ocaplList;Modal.warning({title: "提示",content: h("div", {}, [ocapWarn.map((item, index) > {return h("div", {}, [h("p",${index 1}、${item.defectItem}(…

IntersectionObserver对象

IntersectionObserver对象 IntersectionObserver对象&#xff0c;从属于Intersection Observer API&#xff0c;提供了一种异步观察目标元素与其祖先元素或顶级文档视窗viewport交叉状态的方法&#xff0c;祖先元素与视窗viewport被称为根root&#xff0c;也就是说Intersectio…

c#---多态

在 C#语言中体现多态有三种方式&#xff1a;虚方法&#xff0c;抽象类&#xff0c; 接口 一、虚方法 什么是虚方法&#xff1f; 在父类中使用 virtual 关键字修饰的方法&#xff0c; 就是虚方法。在子类中可以使用 override 关键字对该虚方法进行重写。 class Animal {public…

android apk没有源码如何修改程序

如果您拥有一个APK文件但没有源代码&#xff0c;您可以尝试以下几种方法来进行修改&#xff1a; 反编译APK&#xff1a;使用工具如apktool对APK文件进行反编译&#xff0c;这将为您提供源代码和资源文件。 动态调试&#xff1a;使用调试工具连接设备或模拟器&#xff0c;并动态…

重装前端整体流程

用户管理 --汇总 -- 明细-CSDN博客 一、node 这个看环境变量 2023最新版Node.js下载安装及环境配置教程&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了_nodejs安装及环境配置-CSDN博客 配置到国内镜像的时候&#xff0c;去看&#xff0c;淘…

理解固化的Maven依赖:spring-boot-starter-parent 与 spring-boot-dependencies

目录 理解固化的Maven依赖&#xff1a;spring-boot-starter-parent 与 spring-boot-dependencies1. spring-boot-starter-parent1.1 简介1.2 特点 2. spring-boot-dependencies2.1 简介2.2 特点 3. 异同点对比3.1 相同点3.2 不同点案例一&#xff1a;使用 spring-boot-starter-…

Java方法的重载

方法重载 1. 为什么需要方法重载 public class TestMethod{public static void main (String[] args){int a 10;int b 20;int ret add(a,b);System.out.println("ret "ret);double a2 10.5;double b2 20.5;double ret2 add(a2,b2);System.out.println("…

《QT实用小工具·六十二》基于QT实现贝塞尔曲线画炫酷的波浪动画

1、概述 源码放在文章末尾 该项目实现了通过贝塞尔曲线画波浪动画&#xff0c;可控制 颜色密度速度加速度 安装与运行环境 语言&#xff1a;C 框架&#xff1a;Qt 11.3 平台&#xff1a;Windows 将屏幕水平平均分为10块&#xff0c;在一定范围内随机高度的12个点&#xff08;…

飞天使-k8s知识点29-kubernetes安装1.28.0版本

文章目录 选用版本初始化服务器,自己修改里面的ipreboot haproxy安装 &#xff0c;可以参考我之前写的内核参数调整&#xff0c;安装docker 安装cri-dockerd开始安装集群工具下载镜像以及启用完毕之后 此时的coredns 不通结果展示 选用版本 k8s 1.24版本之前还可以使用docker&…

【初阶数据结构】顺序表OJ题讲解

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL。 &#x1f4da;本文收录与初阶数据结构系列&#xff0c;本专栏主要是针对时间、空间复杂度&#xff0c;顺序表和链表、栈和队列、二叉树以及各类排序算法&#xff0c;持…

基于ambari hdp的kafka用户授权读写权限

基于ambari hdp的kafka用户授权读写权限 版本Kafka 2.0.0添加自定义配置修改admin密码重启kafka授权读取授权写入有效通配符部分举例 版本Kafka 2.0.0 添加自定义配置 authorizer.class.name kafka.security.auth.SimpleAclAuthorizer super.users User:admin allow.everyo…

【LLM 论文】Step-Back Prompting:先解决更高层次的问题来提高 LLM 推理能力

论文&#xff1a;Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models ⭐⭐⭐⭐ Google DeepMind, ICLR 2024, arXiv:2310.06117 论文速读 该论文受到的启发是&#xff1a;人类再解决一个包含很多细节的具体问题时&#xff0c;先站在更高的层次上解…

Android 屏幕适配全攻略(上)-掌握屏幕单位,应对千变万化的设备

本文从 Android 开发中常见的长度单位 px、dp、sp 入手&#xff0c;详细介绍了它们的特点及转换关系。 接着深入探讨了屏幕尺寸、分辨率、像素密度等重要的屏幕指标&#xff0c;帮助读者全面理解它们之间的联系。最后&#xff0c;通过实例代码演示了如何在代码中进行单位转换&…

三分钟上手安全渗透系统Kali Linux

kali linux系统集成了常用的安全渗透工具&#xff0c;省去了安装工具的时间&#xff0c;做安全相关的工作是非常推荐使用的。 安装Kalii Linux 安装系统 一般使用虚拟机进行安装&#xff0c;Kali Linux基于Debian内核&#xff0c;虚拟机的操作系统选择Debian 7.x 64 选择系统…

【SRC实战】一键完成全部任务获取奖励

挖个洞先 https://mp.weixin.qq.com/s/LkPfJuuP1K8vaFXRn-8wVg “ 以下漏洞均为实验靶场&#xff0c;如有雷同&#xff0c;纯属巧合 ” 01 — 漏洞证明 一、业务逻辑 “ 如何欺骗APP完成任务获取奖励&#xff1f; ” 1、记录金币数量20 2、浏览商品详情页 3、点击浏览提…

我们应该如何做参与式观察

记得多年以前&#xff0c;有个朋友问我&#xff1a;对于做观察&#xff0c;有人通过教授绘画技巧来教人如何做观察。你们研究员又不会画画&#xff0c;你们如何让人相信你们更会观察呢&#xff1f;坦率说&#xff0c;当时我被问住了&#xff0c;因为我从来没有进行过这样的对比…