qt QDomDocument

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

XML,全称为“可扩展标记语言”(extensible markuplanguage).是一种非常方便的数据交换与数据存储的工具。

我们在取得一个XML格式的文件后,需要作句法分析去提取发布方提供的信息。而Qt为XML提供了很好的支持,包括DOM方式的实现和SAX方式的实现。

二者主要区别是:

DOM(DocumentObject Model)实现方式操作非常简单,但不适合处理过大文件;而SAX实现方式是能处理很大的XML文件,但是需要开发者写一些复杂的代码。Qt提供了对应于这两种用于读取、操作和编写XML的实现类,分别是QDomDocument类和QXmlStreamReader类,这里我们选QDomDocument类来处理XML文件。

 

首先是读取XML

主要操作包括:

 1).读取根节点:QDomElement  root =doc.documentElement();

2).读取第一个子节点:QDomNode  node = root.firstChild();

3).读取下一个子节点:node = node.nextSibling();

4).匹配结点标记:node.toElement().tagName() =="note"

5).读取节点文本:no =childNode.toText().data();

 

     QFilefile(fileName);
     if(!file.open(QFile::ReadOnly| QFile::Text)) {
         
returnfalse;
     }
     QStringerrorStr;
     
interrorLine;
     
interrorColumn;
 
     QDomDocument doc;
     
if(!doc.setContent(&file,false, &errorStr,&errorLine,&errorColumn))

{ //setContent 是将指定的内容指定给QDomDocument 解析,第一参数可以是QByteArray或者是文件名等。
         returnfalse;
     }
 
     file.close();

 

可以通过 doc.childNodes() 获得doc的所有的 子节点列表QDomNodeList。比如

QDomNodeList list=doc.childNodes();

for(inti=0;i<list.count();i++)

{

QDomNode  node=list.at(i);

// qDebug()<<”node nameis“<<node.nodeName();

// qDebug()<<”node typeis “<<node.nodeType();

}

通过上面的方法你就能知道每个节点的 名字和类型了,节点名字就是 标记 的名字。打印出来对照着 xml文件看就很容易明白了。QDomNode类是一个父类,QDomDocument是QDomNode的一个子类,鉴于大部分 QDomNode的类型都是QDomDocument.那么你可以使用toDocument()函数将QDomNode类型转换成QDomDocument.

QStringtext=node.toElement().text();

上面的语句可以将一个节点里的 文本 取出,也就是标记内的文本 部分。使用该函数获得的编码就已经是unicode格式了,不需要再做转换。

 

 

然后是写入XML

创建节点,将其写入XML文件,主要操作包括:

1).创建根节点:QDomElement  root = doc.documentElement("rootName ");

2).创建元素节点:QDomElement  element= doc.createElement_x_x_x("nodeName");

3).添加元素节点到根节点:root. a(element);

4).创建文本节点:QDomText  nodeText=doc.createTextNode("text");

5).添加文本节点到元素节点:element. a(nodeText);

XML文件的内容:

<?xml version="1.0"encoding="UTF-8"?>

<Notes>

   <note>

       <no>001</no>

       <name>2010-05-10(13:53:24)</name>

       <content>A meeting!</content>

       <font>Script MTBold</font>

   </note>

</Notes>

    QFile  file(fileName);
     
if(!file.open(QFile::ReadOnly | QFile::Text))
         
returnfalse;
     QString errorStr;
     
interrorLine;
     
interrorColumn;
     QDomDocument doc;
     
if(!doc.setContent(&file, false, &errorStr,&errorLine, &errorColumn))
         
returnfalse;
 
     file.close();
 
     QDomElement root = doc.documentElement();
     
if(root.tagName() != "root")
         
returnfalse;
 
     QDomElement element =  doc.createElement_x_x_x(
"file");


     QDomElement el_address = doc.createElement_x_x_x(
"address");
     QDomText text_address = doc.createTextNode(
"text");


     el_address.a
(text_address);
     element.a
(el_address);
 
     QDomElement el_path = doc.createElement_x_x_x_x("path");
     QDomText text_path = doc.createTextNode("text");


     el_path.a (text_path);
     element.a
(el_path);
 
     root.a (element);
 
     QFile f(fileName);
     if(!f.open(QFile::WriteOnly| QFile::Text))
         returnfalse;
 
     QTextStream out(&f);

      out.setCodec("UTF-8");//中文编码

//    doc.save(out,4,QDomNode::EncodingFromTextStream);

     doc.save(out, 3);
     f.close();

这里所有需要append的字节点只能由QDomDocument对象create,而不能直接new它,否则永远也看不到新添加的节点,另外,读取和写入的文件流必须创建两个,否则会将需要写入的文档继续在原来文档的后面,造成多个根节点。

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 空 阅读详情

相关推荐

QT QDomDocument读取XML文件内容

//递归访问所有节点 void dealXmlFile(QDomElement first) {     QDomNode node = first.firstChild();     while(!node.isNull())     {         if(node.childNodes().count()>1)         {             dealXmlFi

houxiaoliwang的博客 1010

Qt学习:QDomDocument

QDomDocument类代表了一个XML文件QDomDocument类代表整个的XML文件。概念上讲:它是文档树的根节点,并提供了文档数据的基本访问方法。由于元素、文本节点、注释、指令执行等等不可能脱离一个文档的上下文,所以文档类也包含了需要用来创建这些对象的工厂方法。被创建的节点对象有一个ownerDocument()函数,它将对象与对象常见的文档上下文环境关联起来。DO...

weixin_34037515的博客 712

QT的QDomDocument类的使用

详细说明 QDomDocument类表示XML文档。 QDomDocument类代表整个XML文档。从概念上讲,它是文档树的根,并提供对文档数据的主要访问。 由于元素,文本节点,注释,处理指令等不能在文档上下文之外存在,因此文档类还包含创建这些对象所需的工厂功能。创建的节点对象具有ownerDocument()函数,该函数将它们与在其上下文中创建的文档相关联。最常使用的DOM类是QDomNode,QDomDocument,QDomElement和QDomText。 解析的XML在内部由对象树表示,可以使用各

希望我的博客,能帮上你解决学习中工作中所遇到的问题 3973

Qt6.5示例:QDomDocument类解析XML文档和文件

QDomDocument类是用于处理XML文档的一个类。它提供了对XML文档数据访问的一系列功能。本示例通过完整示例代码,详细介绍如何利用QDomDocument类解析XML文档和文件。

天恩软件工作室 3332

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

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

小众的博客 2396

Qt中使用QDomDocument和QDomnode来读取xml

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

qdomdocument setcontent_QT 中QDomDocument:setContent有关问题请问

QT 中QDomDocument::setContent问题请教QStringxmlPath="E:\\12.xml";QFilefile(xmlPath);if(!file.open(QIODevice::ReadOnly|QIODevice::Text)){//return0;}QDomDocumentdoc;QStringerrorStr;interrorLine,erro...

weixin_34966374的博客 882

Yolov5实现道路裂缝检测

Yolov5实现道路裂缝检测 参考代码链接 Github代码链接 基于Pytorch的Yolov5道路裂缝检测程序运行说明。大家可以结合我的说明和原文说明使用,有问题欢迎询问。 文章目录Yolov5实现道路裂缝检测环境要求测试训练自己的数据集1.创建dataset.yaml文件2.创建标签文件3.组织文件路径4.选择模型5.开始训练 环境要求 Python 3.8或之后的版本 还要安装requirements.txt文件中所有依赖包,包括1.7及以上版本的torch $ pip install -r req

qq_26751379的博客 2万+

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

ArduPilot代码解析之四 — 姿态和位置控制

ArduPilot采用级联控制架构实现飞行器的姿态和位置管理。该系统通过位置→速度→加速度→姿态→角速率→电机指令的逐级转换,将高级指令转化为底层执行信号。位置控制采用三维独立控制,水平轴与垂直轴分别处理;姿态控制通过角度误差→角速率→电机输出的两层级联实现。系统支持多种输入模式,并内置运动学整形功能确保轨迹平滑。不同飞行器类型(多旋翼、直升机、潜艇等)有专门的调参方案,通过调整PID参数、加速度限制等实现最优控制性能。该架构兼顾控制精度与飞行稳定性,适用于各类自主飞行场景。

rainercool的专栏 826

整合Springboot+MybatisPlus+达梦数据库

整合Springboot+MybatisPlus+达梦数据库,以及一些坑

波波的博客 6678

qdomdocument setcontent_Qt使用QDomDocument操作XML文件

本文介绍的是在Qt使用QDomDocument类实现XML文件的操作,QDomNode类是一个父类,QDomDocument是QDomNode的一个子类,鉴于大部分QDomNode的类型都是QDomDocument。XML,全称为扩展标记语言(extensible markup language).是一种非常方便的数据交换工具。现在Blog的订阅系统输出格式就是满足XML规范的RSS格式,还有SV...

weixin_39996798的博客 755

门控时钟(clock gating)的DFT设计

在数字IC芯片中,时钟树的功耗占比可能高达30%,因此一般会采取门控时钟的方式来降低该部分的功耗。所谓门控时钟,就是在芯片实际工作过程中,有些信号或者功能并不需要一直开启,那么就可以在它们不用的时候将其时钟信号关闭。这样一来信号不再翻转,从而能够有效减少动态功耗。 目前门控时钟都采用集成门控时钟单元(ICG,integrated clock gating cell),其结构如下。由一个latch和一个与门(也有的是或门)组成,可以过滤掉EN信号中的毛刺。一般的工艺库中都会有专门的ICG以供调用。 插入IC

weixin_44746697的博客 3877

Qt的Xml操作QDomDocument

Qt的Xml操作QDomDocumentQt对于Xml的支持是很好的,一些我们需要的操作应有尽有,下面简单介绍一下怎样使用。主要有以下几点使用: 写xml到文件 读xml 添加节点到xml 删除xml中某节点信息 修改xml中某节点信息 准备工作 .pro加入QT += xml 需要include QDomDocument QTextStream QFile三个头文件 WriteXml直接上代码vo

FlyWine的博客 1万+

【QT+VS】如何在现有VS项目中添加Qt界面?【全网最详细】

VS项目有了,就缺个QT界面,怎么办呢?这篇文章帮你一键搞定!

深耕CV 4986

自动驾驶仿真(五)—— 基于Carsim、Prescan、Simulink的联合仿真

自动驾驶仿真五——基于Carsim、Prescan、Simulink的联合仿真1. 联合仿真流程2. CarSim联合仿真配置要点3. Prescan联合仿真配置要点4. Carsim、Prescan、Simulink联合仿真结果5. 参考学习的书目教材 博主前面的博文已经介绍了Carsim和Prescan各自与Matlab/Simulink的相关联合仿真应用实例,并且论述过几款软件各自的优势及用法,CarSim适合动力学模型的建立,PreScan适合行车场景的搭建,Simulink适合控制算法的设计及信号

zhudj08的博客 1万+

QT中QDomDocument读写XML文件

版本说明与编号“Begin”根节点,可以理解为一级目录”TypeX“是子节点,可以理解为二级目录;”name“是属性,”zhangsan“是属性值“sex”“school”等是三级节点,可以理解为三级目录;”girl“”“Xian”等是文本;

MasterPJ的博客 673

最全的Hermes安装教程以及Hermes WebUI安装部署和配置指南

* 直接执行命令**

小石头的专栏 1076

用Qt中的QDomDocument类处理XML文件

<br />本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。<br /> 原文链接:用Qt中的QDomDocument类处理XML文件  <br />XML,全称为扩展标记语言(extensible markup language).是一种非常方便的数据交换工具。现在Blog的订阅系统输出格式就是满足XML规范的RSS格式,还有SVG矢量图形也使用了XML格式。<br />我们在取得一个XML格式的文件

Qt Qt, 分享Cute之Qt体验 1828

一步步带你用C#开发Modbus通信上位机(附完整代码与工程思路)

Modbus上位机开发指南(C#实现) 本文详细介绍使用C#开发Modbus上位机系统的全过程,覆盖RTU和TCP两种协议。内容包含:1)需求分析与技术选型(WinForms+NModbus4);2)分层架构设计(UI/业务/通信层);3)通信层核心代码实现(串口/以太网连接、数据读写);4)功能模块开发(设备管理、数据采集、远程控制)。提供可直接复用的Modbus RTU客户端代码示例,包含连接管理、线圈读写、寄存器操作等工业场景必备功能。通过系统化的开发流程,帮助开发者快速构建稳定可靠的Modbus监控

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 821

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Qt的Xml操作的QDomDocument

Qt的Xml操作QDomDocument Qt对于Xml的支持是很好的,一些我们需要的操作应有尽有,下面简单介绍一下怎样使用。主要有以下几点使用: 写xml到文件 读xml 添加节点到xml 删除xml中某节点信息 修改xml中某节点信息 准备工作 .pro加入QT += xml 需要include QDomDocument QTextStream QFile三个头文件 WriteXml 直接上代码 void writeXml() { QDomDocument doc; QDomPro

周杰伦 1851

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Qt中对QDomDocument和QDomnode的理解

一.对QDomDocument和QDomnode的理解 QDom前缀的都是代表节点类型。所以有,QDomElement代表一个Element节点,而QDomText代表一个Text节点。QDomNode类可以存储任意类型的节点。如果想进一步处理一个节点,首先必须把它转化为正确的数据类型。QDomNode调用toElement()以把它转化成QDomElement,然后调用tagName()来获得...

weixin_33795833的博客 1894

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

QT学习笔记(8)-QDomDocument解析以及QTableView显示

本篇文章是对b站学习视频上面的一些总结与笔记,觉得这个视频还是不错的,值得花时间去听,那样才能更好的打好基础。共勉!这里也贴上一个这个视频的文档资料:https://pan.baidu.com/s/1x8dT6xorLa0jaNe8Wdd0IQ 提取码:8sdy 目录对xml使用QDomDocument进行读写 对xml使用QDomDocument进行读写 首先,你切记要在,pro文件中,加入 QT += xml,不然你就会出现这个错误: NK2019: 无法解析的外部符号 “__declspec(dlli

zwz_chome的博客 1665

qdomdocument setcontent_用 Qt 中的 QDomDocument类 处理 XML 文件

XML,全称为“可扩展标记语言”(extensible markup language).是一种非常方便的数据交换与数据存储的工具。我们在取得一个XML格式的文件后,需要作句法分析去提取发布方提供的信息。而Qt为XML提供了很好的支持,包括DOM方式的实现和SAX方式的实现。二者主要区别是:DOM (Document Object Model)实现方式操作非常简单,但不适合处理过大文件;而SA...

weixin_42539414的博客 1780

Qt通过QDomDocument实现xml文件读取解析

本机系统配置:ThinkPadT570、Windows10、QT5.12.2(QtCreater4.8.2) 我建立的qt工程名为EditPic 需要解析的配置文件名为test.config,放在工程目录下 配置文件内容如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <ROOT version="...

weixin_43935474的博客 1976
上一篇: Qt 编程点滴 初学者必看(1)
下一篇: QString::compare
Abigale
博客等级 码龄16年 33粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值