QT中QDomDocument读写XML文件

QDomDocument的使用 QDomDocument是QT所封装的类,用来操作XML文件。而xml在项目中的角色常常是用来存储一些配置数据,因此在大部分的项目中会用到两个功能:写XML文件和读取XML文件。具体情况见代码: #include <QtCore/QCoreApplication> #include <QDomDocument> #include <QMap> #include <QTextStream> #include <QFile> #include &l 阅读详情

一、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_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    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();//获取二级目录节点的属性值管理者domElement
        if(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 instruction
    QDomDocument 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文件保存成功!");
}

四、项目运行

与写操作写的信息一致

Qt中使用QDomDocument读写XML文件 注意事项 1、在*.pro文件中添加 QT += xml; 2、xml文件中只能存在一个根节点,如果存在根节点的兄弟节点,则只能读取到第一个根节点的内容。 #include <QDomDocument> #include <QFile> #include <QTextStream> #include <QDebug> int main(in... 阅读详情

相关推荐

Qt 读写xml文件(QDomDocument)

#ifndef DOCXML_H #define DOCXML_H #include <QString> #include <QStringList> #include <QDomDocument> #include <QDomElement> class DocXml { public: DocXml(); static void CreateXml(const QString &filePath); //创建xml 空

芒种、的博客 3194

QtXml:QDomDocument

一、描述 QDomDocument 类表示整个 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的主要访问。 由于元素、文本节点、注释、处理指令等不能存在于文档的上下文之外,因此文档类还包含创建这些对象所需的工厂函数。创建的节点对象有一个 ownerDocument() 函数,该函数将它们与创建它们的上下文中的文档相关联。 解析的 XML 在内部由对象树表示,可以使用各种 QDom 类访问这些对象树。所有 QDom 类只引用内部树中的对象。一旦最后一个引用它们的 QDom 对象或 QDomD

友善啊,朋友的博客 9686

QDomDocument读写XML文件

XML文件大家应该都很熟悉,与ini一样,xml也是常用的软件配置文件格式。 在读写一个xml文件之前, 首先要做的工作是设计好xml文件的结构。 XMLSpy这个工具在xml设计方面有显著的优势,本人使用的是XMLSpy  2015,可以上官网http://www.altova.com/download-trial.html下载,并申请试用版本的序列号。 设计完的结构如下: 设计完结

开启技术人生 1万+

QDomDocument的使用方法和实践 xml解析

qdomdocument是Qt库中的一种用于创建、操作和解析XML文档的类。它可以将XML文档解析成一个树形结构,以方便地进行节点的遍历和修改。同时,它也可以将树形结构的XML文档序列化为字符串或写入文件中。在开发过程中,经常需要对XML文档进行操作,例如读取、修改、添加或删除节点。使用qdomdocument可以更加高效和方便地完成这些操作,同时它也避免了手动解析XML文档所带来的繁琐和错误。下面我们将从使用方法、节点操作和序列化等方面对qdomdocument进行详细阐述。

qq_43251915的博客 5182

QT5——xml文件的读写

1、使用流QXmlStreamReader、QXmlStreamWriter读写xml文件 项目的pro文件里面添加: QT +=core xml 用QXmlStreamReader读取xml文本内容 在路径C:\Users\Administrator\Desktop\ZGXIPCDemo中存放device.xml文件。内容以及各式如下: 使用qDebug()显示读取文件的内容 #include<QFile> #include<QXmlStreamReader> #in

Nie2014的博客 2620

QT读写XML文件之DOM方式解析XML

一、DOM简介 1、DOM简介 DOM是Document Object Model的简写,即XML文档对象模型,是由W3C提出的一种处理XML文档的标准接口。DOM 一次性读入整个XML文档,在内存中构造为一棵树(DOM树)将XML文件表示成一棵树,便于随机访问其中的节点,但消耗内存相对多一些。能够在这棵树上进行导航,比如移动到下一节点或者返回上一节点,也可以对这棵树进行修改,或者是直接

小众的博客 2396

qt使用QDomDocument读写xml文件

在使用QDomDocument读写xml之前需要在工程文件添加: QT += xml 1.生成xml文件 void createXml(QString xmlName) { QFile file(xmlName); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text)) re...

weixin_43510054的博客 1131

Qt中使用QDomDocument和QDomnode来读取xml

Qt中使用QDomDocument和QDomnode来读取xml 内容简介:一.对QDomDocument和QDomnode的理解QDom前缀的都是代表节点类型。所以有,QDomElement代表一个Element节点,而QDomText代表一个Text节点。QDomNode类可以存储任意类型的节点。如果想进一步处理一个节点,首先必须把它转化为正确的数据类型。QDomNode调用toElement()以把它转化成QDomElement,然后调用tagName()来获得元素的标签名称。如果节点不是Element类型,那么toElement()函数就返回一个空QDomElement对

Qt下读写XML格式文件(使用QDomDocument类)

原文地址::https://blog.youkuaiyun.com/lusanshui/article/details/84309151 相关文章 1、Qt中三种解析xml的方式----https://www.cnblogs.com/albizzia/p/9152992.html

xqhrs232的专栏 418

RDMA网络通信技术、NCCL集合通讯(GPU)

NCCL 是 NVIDIA 专为 GPU 设计的高性能集合通信库,用于优化多 GPU、多节点间的集体操作(如 AllReduce、Broadcast、AllGather 等),是深度学习分布式训练的核心组件。RDMA 允许计算机直接访问远程内存,无需 CPU 干预,大幅降低了网络通信的延迟和 CPU 开销。常见的 RDMA 实现包括。是两项关键技术,用于优化节点间数据传输效率和大规模并行计算性能。在高性能计算(HPC)、人工智能训练和数据密集型场景中,

weixin_42795092的博客 2422

Linear超高PSRR线性稳压器-典型应用电路解析

本文整理完了LT3045数据手册内所有的典型应用电路,试图让沉默的电路开口,简单介绍了他们这样做的目的和原理,从中我们可以更加熟悉这颗经典芯片的应用。但也有一些电路并没有搞懂,遗留下了不少问题。

硬件工程师笔记 2943

QT 使用QXmlStreamReader/QXmlStreamWriter和QDomDocument俩种方式读写XML文件

如果你的应用程序需要遍历大型 XML 文档,或者只需要进行只读或只写的操作,那么 `QXmlStreamReader`/`QXmlStreamWriter` 可能是更好的选择,因为它们更高效且资源消耗更少。 - 如果你的应用程序需要频繁地修改 XML 文档,或者需要随机访问文档中的元素,那么 `QDomDocument` 可能更适合,因为它提供了更灵活的 API 来操作文档。

Ray 2929

数据结构:五岔路口交通管理红绿灯设计

我们可以知道这是一个“图”的着色问题,首先要考虑,为什么可行路线是13条?当然可以通过穷举得出,如果用公式:则是: 或者 因为一条路线必须包括一出一进两个方向 第一种答案的解法: 一、固定E为入口,则有C_4^1=4的可能; 二、除去E(因为E只有一个入向),剩下ABCD四个路口,然后因为C只有一个出方向,所以从剩下 的ABD中选择一个入口,即C_3^1; 三、再从剩下的三个出口任选

潘猫猫的世界 1万+

Qt QDomDocument读写XML文件

Qt QDomDocument读写XML文件

m0_73443478的博客 1047

C51红外接收与发射控制及原理编码与解码

基于38khz的NEC协议红外发射简易电路图NEC协议产生红外光数据编码 0 1结合程序红外接收接收电路解码过程解码代码 红外发射 通过通过红外二极管发射红外光,三极管的状态来控制。 红外模块一般都是三个引脚,vcc,gnd,dat,通过控制dat口的来控制发射红外光。 简易电路图 将数据口连接到单片机的引脚为上,控制io口的电平状态,来控制三极管的导通状态,从而发射红外光。 NEC协议 NEC协议特点:8位地址和8位命令为提高可靠性,地址和命令都传输2次,脉冲间隔调制38kHz载波频率。 包含引导码,

yangfeng20的博客 1万+

互联网人提高效率必备软件合集

很多的时候我们解决不了问题,只是因为没有找到对的工具,实际上,很多好的工具就在那里,只是你不用而已。这点上,信息壁垒是一个很大的原因,因此我希望兄伙伴们多出去走走,不要只是局限在一个圈层;

zhonglunshun的专栏 3484

QT QDomDocument 读写XML文件

因为需要读取配置文件,我的配置文件采用xml;因此编写了使用qt读取xml文件内容的代码,xml文件 如下: ?xml version="1.0" encoding="UTF-8" ?> configuration>   server>     item key="serverip" value="222.88.1.146" />     item key=

学习时间的专栏 977

【AI】获取各类AI大模型api-key的快速教程(OpenAI、Gemini、Claude、DeepSeek)

【AI】获取各类AI大模型api-key的快速教程(OpenAI、Gemini、Claude、DeepSeek)

funfan的博客 3010

Qt 提供 QDomDocument库来读写xml文件的一个简单示例

这些例子是非常基础的,只涵盖了如何读取和写入简单的 XML 数据。在实际使用中,你可能需要处理更复杂的情况,例如处理命名空间、处理属性、处理CDATA部分等。对于这些更复杂的情况,Qt 的 QDomDocument 类同样提供了相应的功能。Qt 提供了 QDomDocument 类来处理 XML 文件,这个类是 Qt 的 DOM(Document Object Model)实现。以下是一个简单的例子,演示了如何使用 QDomDocument 来读取和写入 XML 文件。

slty_123的博客 630

多测师肖sir_高级金牌讲师_数据库之存储练习题(8.13.1)

实验 一、 实验要求: 理解存储过程的概念 掌握存储过程的语法格式、使用方法 掌握存 储过程的创建、执行 二、实验前提: – drop table if exists student; – Create table student – (Id varchar(255), #学号 – Name varchar(255), #姓名 – Roomid varchar(255), #班级 – Sex char(1), #性别 – Degree varchar(3) );#成绩; Insert into stud

多测师肖sir的博客 706

Qt入门教程【环境搭建篇】Qt6+Mingw+QMake+QtCreator

Qt Windows平台安装

小鱼酱的博客 2万+

Qt通过QDomDocument实现将数据保存为xml文件

本机系统配置:ThinkPadT570、Windows10、QT5.12.2(QtCreater4.8.2) 通过QDomDocument实现xml文件的写入主要有以下几个步骤: 1.定义QDomDocument变量 QDomDocument m_domDocSaveConfig; 2.创建根节点: QDomElement root = m_domDocSaveConfig.docume...

weixin_43935474的博客 7822

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++/Qt读写xml文件

Qt读写xml文件可以使用QDomDocument或者QXmlStreamReader(QXmlStreamWriter),其中前者是获取整个dom树操作,后者是按照读文件一样按行读取。C++读写xml文件需要借助第三方来实现,比较好用的有tinyxml2和pugixml,对应的网址链接。项目代码中仅仅需要包含tinyxml2.h和tinyxml2.cpp两个文件即可,以读写这个xml为例。同样是读刚刚的xml文件,以下是读函数。执行后可以查看文件已经被修改。可以看到文件已被修改。执行之后可以看到打印。

苍天愚弄我 1652

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

《Qt开发》读写XML文档1_DOM读写

一、Qt写XML文件 1.准备xml文件 QFile file("my.xml"); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return; 2.准备QDomDocument对象doc QDomDocument doc; 3.准备QDomProcessingInstruction处理指令对象instruction,使用QDomDocument的createProcessingInstruction创建指令,...

一万年太久,只争朝夕 827

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: QT中的样式表.qss文件
下一篇: QT中使用QAxObject类读取xlsx文件内容并显示在ui界面
PJ...
博客等级 码龄5年 412粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值