QT中QDomDocument讀寫XML文件

一、XML文件

<?xml version="1.0" encoding="UTF-8"?>
<Begin><Type name="zhangsan"><sex>boy</sex><school>Chengdu</school><age>18</age><special>handsome</special></Type><Type name="lisi"><sex>boy</sex><school>Xian</school><age>19</age><special>ugly</special></Type>
</Begin>

<?xml version="1.0" encoding="UTF-8"?>版本說明與編號

“Begin”根節點,可以理解為一級目錄

”TypeX“是子節點,可以理解為二級目錄;”name“是屬性,”zhangsan“是屬性值

“sex”“school”等是三級節點,可以理解為三級目錄;”girl“”“Xian”等是文本;

二、QT中的QDomDocument類

使用時需要添加xml模塊。

qt幫助手冊簡單例子

三、實際代碼操作讀寫操作

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QFile>
#include <QDomDocument>
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;private:void my_xml_read();void my_xml_write();
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//xml讀寫my_xml_read();my_xml_write();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::my_xml_read()
{QDomDocument doc("info");QFile file(":/info.xml");if (!file.open(QIODevice::ReadOnly))return;if (!doc.setContent(&file))//將文件與DomDocument關聯{file.close();return;}file.close();QDomElement firstElem = doc.documentElement();//獲取到了<begin>一級目錄qDebug()<<"一級目錄<begin>: "<<firstElem.nodeName();QDomNodeList secondList = firstElem.childNodes();//獲取全部二級目錄<Type1><Type2><Typ3>for (int i = 0; i < secondList.count(); ++i) {QString str = QString("      第 %1 個二級目錄節點:").arg(i+1);qDebug()<<str.toUtf8().data()<<secondList.at(i).nodeName();//將QString轉換成char *,使用qDebug輸出沒有引號QDomElement secondElem = secondList.at(i).toElement();//獲取二級目錄節點的屬性值管理者domElementif(secondElem.hasAttribute("name")){//輸出二級目錄節點的屬性值qDebug()<<"      "<<secondElem.nodeName().append("的屬性值name為").toUtf8().data()<<secondElem.attribute("name");}else{qDebug()<<"      "<<secondElem.nodeName().append("該節點無屬性值").toUtf8().data();}QDomNodeList thirdList = secondList.at(i).childNodes();//獲取三級目錄<具體值></具體值>for(int j = 0;j<thirdList.length();j++ ){QDomElement thirdElement=thirdList.at(j).toElement();QString str_1 = QString("            %1中第 %2 個三級目錄節點 %3,他的文本值為 %4:").arg(secondList.at(i).nodeName(),QString::number(j+1),thirdList.at(j).nodeName(),thirdElement.text());qDebug()<<str_1.toUtf8().data();//將QString轉換成char *,使用qDebug輸出沒有引號}}
}void MainWindow::my_xml_write()
{//add instructionQDomDocument doc;QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");//寫xml中的第一行說明doc.appendChild(instruction);//add 第一級目錄節點QDomElement firstNode = doc.createElement("Begin");doc.appendChild(firstNode);//add 第二級目錄節點QDomElement secondNode = doc.createElement("Type");//為二級目錄添加屬性值QDomAttr secondAttr = doc.createAttribute("MyLover");secondAttr.setValue("lr");secondNode.setAttributeNode(secondAttr);firstNode.appendChild(secondNode);//一級目錄下添加二級節點//add 第三級目錄節點 添加text文本值QDomElement thirdNode_1 = doc.createElement("sex");secondNode.appendChild(thirdNode_1);QDomText t1 = doc.createTextNode("girl");thirdNode_1.appendChild(t1);QDomElement thirdNode_2 = doc.createElement("school");secondNode.appendChild(thirdNode_2);QDomText t2 = doc.createTextNode("Chengdu");thirdNode_2.appendChild(t2);QDomElement thirdNode_3 = doc.createElement("age");secondNode.appendChild(thirdNode_3);QDomText t3 = doc.createTextNode("28");thirdNode_3.appendChild(t3);QDomElement thirdNode_4 = doc.createElement("special");secondNode.appendChild(thirdNode_4);QDomText t4 = doc.createTextNode("beautiful");thirdNode_4.appendChild(t4);QString fileName = QFileDialog::getSaveFileName(this,"Save xml file","../my_xml","xml(*.xml)");if(fileName.isEmpty()){return;}QFile myFile(fileName);bool ret =myFile.open(QIODevice::WriteOnly|QIODevice::Text);if(!ret){QMessageBox::warning(this,"warning","保存文件失敗!");return;}QTextStream stream(&myFile);//使用QTextStream類與文件關聯進行保存xml!stream.setCodec("UTF-8");//編碼格式doc.save(stream,4);//4代表的是縮進個數myFile.close();QMessageBox::information(this,"save tip","xml文件保存成功!");
}

四、項目運行

與寫操作寫的信息一致

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39260.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39260.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39260.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【YOLOv5進階】——引入注意力機制-以SE為例

聲明&#xff1a;筆記是做項目時根據B站博主視頻學習時自己編寫&#xff0c;請勿隨意轉載&#xff01; 一、站在巨人的肩膀上 SE模塊即Squeeze-and-Excitation 模塊&#xff0c;這是一種常用于卷積神經網絡中的注意力機制&#xff01;&#xff01; 借鑒代碼的代碼鏈接如下&a…

在C#中使用RabbitMQ做個簡單的發送郵件小項目 _

前言 好久沒有做項目了&#xff0c;這次做一個發送郵件的小項目。發郵件是一個比較耗時的操作&#xff0c;之前在我的個人博客里面回復評論和友鏈申請是會通過發送郵件來通知對方的&#xff0c;不過當時只是簡單的進行了異步操作。那么這次來使用RabbitMQ去統一發送郵件&#x…

vue中路由來回切換頁面直接卡死

今天發現一個很嚴重的問題&#xff0c;項目好不容易做好了&#xff0c;結果頁面多了&#xff0c;切換之后卡死。頁面所有的交互效果都失效了。 排查了許久的錯誤原因最后發現原來是路由名稱重復了。 如上圖當頁面跳轉到riskdetails詳細頁面之后&#xff0c;框架則被這個詳情頁…

隨機森林R語言預測工具

隨機森林&#xff08;Random Forest&#xff09;是一種基于決策樹的集成學習方法&#xff0c;它通過構建多個決策樹并集成它們的預測結果來提高預測的準確性。在R語言中&#xff0c;我們可以使用randomForest包來構建和訓練隨機森林模型。以下是對隨機森林的詳細介紹以及使用R語…

java高仿真數據生成器-需要的拿去

java高仿真數據生成器源碼-需要的拿去 nit-random-tools 介紹&#xff1a;高仿真數據生成器 逆天開源 java 證號碼, 姓名&#xff0c;職業, 日期&#xff0c;手機號 生成器 功能列表 編號功能描述class1號 生成器NitIdcardGenerator2姓名 生成器NitChineseNameGenerator3職…

node.lib下載失敗,手動下載并配置

在無網絡環境&#xff0c;或者網絡不好的環境&#xff0c;node.lib會下載失敗&#xff0c;此時可手動下載并進行配置。 我們以 node16.17.0 為例&#xff1a; 下載地址 分別下載node.lib和headers https://registry.npmmirror.com/-/binary/node/v16.17.0/win-x64/node.lib…

目標檢測算法的技術革新與應用案例

引言 目標檢測作為計算機視覺領域中的一項關鍵技術&#xff0c;近年來取得了顯著進展。從傳統的基于特征的方法到如今的深度學習算法&#xff0c;目標檢測技術在準確性、速度和魯棒性上均實現了大幅提升。本文將深入探討目標檢測算法的技術原理、發展歷程、最新進展以及實際應…

HarmonyOS--開發者證書考試地址

初級證書&#xff1a;華為開發者學堂 高級證書&#xff1a;華為開發者學堂 對應課程&#xff1a;華為開發者學堂

Linux rpm與yum

一、rpm包管理 rpm用于互聯網下載包的打包及安裝工具&#xff0c;它包含在某些Linux分發版中。它生成具有.RPM擴展名的文件。RPM是RedHat Package Manager (RedHat軟件包管理工具&#xff09;的縮寫&#xff0c;類似windows的setup.exe&#xff0c;這一文件格式名稱雖然打上了R…

辦理北京公司注銷流程和步驟說明

公司的生命周期是多變的&#xff0c;有時候&#xff0c;業務可能會結束或者出現其他原因&#xff0c;需要注銷公司。注銷公司是一個復雜的法律過程&#xff0c;需要遵循一系列的步驟和提交特定的材料。下面我們將詳細介紹北京注銷公司的流程以及需要準備的材料&#xff0c;以幫…

《等保測評實戰指南:從評估到加固的全程解析》

在當今數字化時代&#xff0c;信息安全已成為企業生存與發展的基石。隨著網絡攻擊手段的不斷演變和復雜度的提升&#xff0c;信息系統等級保護&#xff08;簡稱“等保”&#xff09;作為國家信息安全保障體系的重要組成部分&#xff0c;其重要性日益凸顯。《等保測評實戰指南&a…

私有云統一多云管理平臺主要服務內容

私有云統一多云管理平臺&#xff0c;作為企業IT架構現代化的關鍵組成部分&#xff0c;旨在為企業提供高效、靈活、安全的云計算資源管理解決方案。這類平臺通過整合和優化不同云環境(包括私有云、公有云、混合云)的管理&#xff0c;幫助企業打破云孤島&#xff0c;實現資源的統…

clickhouse-client 數據導入導出

ClickHouse提供了clickhouse-client客戶端可用于數據的快速導入導出 官方文檔&#xff1a; Inserting Data from a File JSONL 格式 導出 clickhouse-client -h 127.0.0.1 --port 9000 -u default --password XXX -d default \--query "SELECT * from default.doc_typ…

【游戲引擎之路】登神長階(五)

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D數學基礎》。 6月13日-6月20日&#xff1a;攻克《3D圖形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戲教程》。 6月23日-6月30日&#xff1a;攻克《Windows游戲編程大師技巧》。 …

【Qwen2部署實戰】Qwen2初體驗:用Transformers打造智能聊天機器人

系列篇章&#x1f4a5; No.文章1【Qwen部署實戰】探索Qwen-7B-Chat&#xff1a;阿里云大型語言模型的對話實踐2【Qwen2部署實戰】Qwen2初體驗&#xff1a;用Transformers打造智能聊天機器人3【Qwen2部署實戰】探索Qwen2-7B&#xff1a;通過FastApi框架實現API的部署與調用4【Q…

從任意用戶注冊到任意密碼重置

寫在最前面一句話 To be or not to be ,it‘s a question . 哎呀&#xff0c;放錯臺詞了&#xff0c;應該是 true or false , 在最近的測試中遇到了一個很有趣的點 “將 false 改為true ”就可以成功繞過驗證碼了。 T rue or false &#xff1f;&#xff1f;&#xff1f; …

Oracle PL / SQL包

在實踐中&#xff0c;您很少創建獨立的存儲函數或過程。 相反&#xff0c;你會使用一個包。 包可以一起組織相關的功能和過程&#xff0c;例如創建庫&#xff0c;但在PL / SQL中&#xff0c;庫被稱為包。 PL / SQL包有兩個部分&#xff1a; 包規格包裝體 包規范是包的公共…

使用fabric8操作k8s

文章目錄 一、引入fabric包二、認證1、使用config文件認證2、使用oauthtoken認證 三、pod的查詢和遍歷四、命名空間的創建和刪除五、deployment的創建和刪除部分參數說明1、resourceRequirements2、containerPorts3、envVarList4、volumeMounts和volumeList5、nodeAffinity 六、…

「51媒體」企業舉行新聞發布會,如何邀請媒體到場報道

傳媒如春雨&#xff0c;潤物細無聲&#xff0c;大家好&#xff0c;我是51媒體網胡老師。 媒體宣傳加速季&#xff0c;100萬補貼享不停&#xff0c;一手媒體資源&#xff0c;全國100城線下落地執行。詳情請聯系胡老師。 企業舉行新聞發布會時&#xff0c;邀請媒體到場報道是一個…

MySQL常用操作命令大全

文章目錄 一、連接與斷開數據庫1.1 連接數據庫1.2 選擇數據庫1.3 斷開數據庫 二、數據庫操作2.1 創建數據庫2.2 查看數據庫列表2.3 刪除數據庫 三、表操作3.1 創建表3.2 查看表結構3.3 修改表結構3.3.1 添加列3.3.2 刪除列3.3.3 修改列數據類型 3.4 刪除表 四、數據操作4.1 插入…