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.pswp.cn/web/9900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/9900.shtml
英文地址,請注明出處:http://en.pswp.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;因為我從來沒有進行過這樣的對比…