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

四足机器人通用运动控制策略:强化学习与PD参数优化

运动控制是机器人实现稳定行走和复杂动作的核心技术,其关键在于精确调节关节的刚度和阻尼特性。PD控制器作为基础控制单元,通过比例(P)和微分(D)增益参数直接影响系统响应速度与稳定性。在四足机器人领域,强化学习(RL)通过模拟环境自主学习,能够有效解决传统控制方法难以适应不同形态机器人的痛点。该技术通过非对称Actor-Critic架构,结合状态估计网络和自适应参数采样策略,实现了跨平台的通用运动控制。典型应用包括工业检测、灾害救援等需要高适应性移动能力的场景,其中PD增益优化和形态参数自适应采样成为提升硬件

weixin_30307921的博客 300

告别手动配置!用Vector vLinkGen 2.1.0自动生成AUTOSAR链接脚本(附bss段配置详解)

本文详细介绍了如何使用Vector vLinkGen 2.1.0工具自动生成AUTOSAR链接脚本,告别繁琐的手动配置。通过解析vLinkGen的核心架构和bss段配置实践,帮助开发者提升嵌入式软件开发效率,支持多种主流编译器,实现精确的内存分配和初始化策略。

weixin_28716181的博客 379

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

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

Ray 2929

从零到英雄:WSL2与Ubuntu22.04的终极性能调优指南

本文详细介绍了如何在Windows系统中通过WSL2与Ubuntu22.04进行性能调优,涵盖内核定制、GPU加速、网络优化等关键技巧,帮助开发者打造媲美原生Linux的高性能开发环境,特别适合AI训练和大数据处理等资源密集型任务。

weixin_29218509的博客 523

Qt QDomDocument读写XML文件

Qt QDomDocument读写XML文件

m0_73443478的博客 1047

面板数据门槛归回分析,xthreg的安装,xthreg2安装包

我用的是Stata17,数据是不平衡的面板数据,需要用到xthreg2,虽然我找到了xthreg2.ado,但是还需要安装xthreg,因为运行xthreg2需要xthreg包顺带安装的lxthreg.mlib文件。但是!我后来发现还是不行,最后是去买了一个真正能用到xthreg2的lxthreg.mlib文件,才可以运行。

weixin_55252589的博客 1万+

保姆级教程:用Cesium的Primitive API实现火箭发射全流程动画(含代码避坑)

本文详细介绍了如何使用Cesium的Primitive API实现火箭发射全流程动画,包括模型控制、关节动画和精细时序管理。通过实战代码示例和性能优化技巧,帮助开发者高效构建高复杂度航天仿真系统,显著提升三维可视化效果与运行效率。

weixin_42565652的博客 213

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

Zemax操作33--5倍激光扩束器

5倍扩束

lzy750750的博客 2932

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

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

slty_123的博客 630

独立站如何采集商品?外贸独立站采集教程

从这里Robert了解到还有国内有很多仿牌卖家、微商,都有类似的情况,他们出海的阻碍主要在于支付、物流、推广。8.插件“抓取任务”列表手动点同步,将商品同步到主商城后台商品管理列表(商品默认同步到下架列表中) 后台商品管理下架列表显示已同步商品。5.店铺信息修改完成后,可以开始采集商品,采集时弹窗中会自动识别当前平台及商品链接,分类和相册名称可以自定义 编辑修改。4. 打开采集目标站商品页面,点开谷歌浏览器扩展程序列表,找到Shopyy采集平台,打开配置页。打开弹窗中的“店铺管理”,添加店铺信息。

Jernnifer_mao的博客 1379

【x265编码器】章节6——x265的码率控制

对于CRF模式而言,右边这部分是是固定值m_rateFactorConstant,在初始化的时候确定,跟分辨率,qCompress这个参数是外部可设参数,默认值0.6,因此QP的选择只跟编码复杂度有关,跟码率无关,编码复杂度越高,QP值越高,因此可以一定程度上说CRF模式是恒定质量的编码模式。其中Complex表示当前帧的编码复杂度,x265中用lookahead模块计算的SATD作为衡量当前帧的复杂度,c为模型参数,qscale是率失真优化中的拉格朗日乘子,R为编码当前帧需要的比特数。

vcvdv123的博客 1万+

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++/Qt读写xml文件

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

苍天愚弄我 1652

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

《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

精雕软件(JDpaint) 5.5 绿色版

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

上一篇: 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、付费专栏及课程。

余额充值