XML文件简介

  • XML - EXtensible Markup Language,可拓展标记语言

Qt中加载XML模块

.pro 文件中添加

QT += xml

Qt的XML访问方式

引用:https://blog.csdn.net/liang19890820/article/details/52805902

Qt 提供了两种访问 XML 文档的方式:DOM 和 SAX。

  • DOM 方式:将 XML 文档转换为树形结构存储到内存中,再进行读取,消耗的内存比较多。此外,由于文档都已经存储到内存,所以需要频繁实现修改等操作时,使用起来比较方便。
  • SAX 方式:相比于 DOM,SAX 是一种速度更快,更有效的方法,它逐行扫描文档,一边扫描一边解析(由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档的解析是个巨大优势)。而且相比于 DOM,SAX 可以在解析文档的任意时刻停止解析。但操作复杂,很难修改 XML 数据。

DOM

描述
QDomAttr 表示一个 QDomElement 的属性
QDomCDATASection 表示一个 XML CDATA 部分
QDomCharacterData 表示 DOM 中的一个通用字符串
QDomComment 表示一个 XML 注释
QDomDocument 表示一个 XML 文档
QDomDocumentFragment QDomNodes 树,通常不是一个完整的 QDomDocument
QDomDocumentType 表示文档树中的 DTD
QDomElement 表示 DOM 树中的一个元素
QDomEntity 代表一个 XML 实体
QDomEntityReference 代表一个 XML 实体引用
QDomImplementation DOM 实现的功能的信息
QDomNamedNodeMap 包含一个节点集合,节点可以通过名字来访问
QDomNode 一个 DOM 树中所有节点的基类
QDomNodeList QDomNode 对象列表
QDomNotation 代表一个 XML 表示法
QDomProcessingInstruction 代表 XML 处理指令
QDomText 表示解析的 XML 文档中的文本数据

说明:

  • XML的每级元素(QDomElement),也可以称之为结点(QDomNode),QDomElement继承自QDomNode;
  • QDomNode可以使用toElement()方法转换成QDomElement;

常用方法

QDomDocument doc("test_xml");
QFile xml_file("FiltersConf.xml");
if(!doc.setContent(&xml_file)) //也可以传入字符串
{
qDebug()<<"set content fail";
return 0;
}
QDomElement root_element = doc.documentElement();//获取xml文件的根元素
qDebug()<<root_element.tagName(); //使用tagName()方法获取元素的标签名
QDomNode node = root_element.firstChild();//获取第一个子结点
QString attr = node.toElement().attribute("name");//获取属性
while(!node.isNull())
{
qDebug()<<"-"<<node.toElement().tagName();
node = node.nextSibling(); //获取同级的结点
}

写入XML

QDomDocument document;
//xml头部的<?xml version="1.0" encoding="UTF-8"?>
QDomProcessingInstruction instruction = document.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
document.appendChild(instruction);
QDomElement root_node = document.createElement("transpond");//创建根结点
document.appendChild(root_node); //添加根结点 QDomElement element = document.createElement("machine");//创建元素结点
element.setAttribute("type", "machine");
root_node.appendChild(element);//元素结点添加到根结点下 QDomElement item_element = document.createElement("machine-item");//创建item结点
item_element.setAttribute("type", "11");
item_element.setAttribute("name", "22");
item_element.setAttribute("device-code", "33");
item_element.setAttribute("ip", "44");
item_element.setAttribute("sync-time", "55"); //写入文件
QFile file(pConfigManager->GetMachineInfoFile());
if(!file.open(QIODevice::ReadWrite | QIODevice::Truncate))
{
return false;
}
QTextStream in(&file);
document.save(in, 4);
file.close();

Qt之xml文件解析的更多相关文章

  1. 通过正则表达式实现简单xml文件解析

    这是我通过正则表达式实现的xml文件解析工具,有些XHTML文件中包含特殊符号,暂时还无法正常使用. 设计思路:常见的xml文件都是单根树结构,工具的目的是通过递归的方式将整个文档树装载进一个Node ...

  2. 八、Android学习第七天——XML文件解析方法(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:exten ...

  3. android基础知识13:AndroidManifest.xml文件解析

    注:本文转载于:http://blog.csdn.net/xianming01/article/details/7526987 AndroidManifest.xml文件解析. 1.重要性 Andro ...

  4. Android之AndroidManifest.xml文件解析

    转自:Android学习笔记之AndroidManifest.xml文件解析 一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文 ...

  5. 9.XML文件解析

    一.XML简介 XML(EXtensible Markup Language),可扩展标记语言 特点:XML与操作系统.编程语言的开发平台无关 实现不同系统之间的数据交换 作用:数据交互 配置应用程序 ...

  6. Python实现XML文件解析

    1. XML简介 XML(eXtensible Markup Language)指可扩展标记语言,被设计用来传输和存储数据,已经日趋成为当前许多新生技术的核心,在不同的领域都有着不同的应用.它是web ...

  7. Python3将xml文件解析为Python对象

    一.说明 从最开始写javascript开始,我就很烦感使用getElementById()等函数来获取节点的方法,获取了一个节点要访问其子孙节点要么child半天要么就再来一个getElementB ...

  8. QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写   ...

  9. XML文件解析-DOM4J方式和SAX方式

    最近遇到的工作内容都是和xml内容解析相关的. 1图片数据以base64编码的方式保存在xml的一个标签中,xml文件通过接口的方式发送给我,然后我去解析出图片数据,对图片进行进一步处理. 2.xml ...

随机推荐

  1. 【Tool】Windows系统安装Maven依赖管理工具

    安装Maven依赖管理工具 官网下载地址:http://maven.apache.org/download.cgi 系统环境要求: [JDK]Maven3.3版本+需要JDK1.7版本以上支持 [内存 ...

  2. Geber文件,装配图,BOM表的输出

    一.Geber文件的输出步骤: 注:选择需要导出的层 注:所指箭头的地方都多加个零,让输出有更大的空间来容纳 总结:这就是最终的Geber文件了 二.NC   Drill file的输出: 三.IPC ...

  3. vue中 使用SVG实现鼠标点击绘图 提示鼠标移动位置 显示绘制坐标位置

    <div class="div1"> <svg id="svg1" xmlns="http://www.w3.org/2000/sv ...

  4. Mac下打开 kvm

    mac 下打开 kvm ,需要装这个 https://www.xquartz.org/

  5. 手机app测试用例怎么写?手机app测试点有哪些?只有干货没有水分,错过绝对后悔!

    一.前言    在当今竞争激烈的市场上一个APP的成功离不开一个可靠的测试工程师.因此,对功能和用户体验有特殊关注的App进行全面测试是必不可少的.如何做到测试用例的百分百覆盖一直是测试用例编写过程中 ...

  6. php json接口demo

    <?php class Student { public $no; public $username; public $password; } $student=new Student(); $ ...

  7. view-controller

    有的时候我们只想根据一个请求地址跳转到一个页面中,中间并没有任何的处理流程,这个时候创建一个 Controller 类再编写方法来跳转就显得很繁琐.这个时候我们就可以使用 view-controlle ...

  8. Inno Setup, Pascal 字符串带双引号如何写

    Windows 的路径中如果有空格,就需要用双引号括起来.只能填 ASCII-Code-Number (decimal),不能用一般的 escape 方法. # + path + # 查询这个表的第一 ...

  9. Spring5参考指南:组件扫描

    文章目录 组件扫描 @Component 元注解和组合注解 组件内部定义Bean元数据 为自动检测组件命名 为自动检测的组件提供作用域 生成候选组件的索引 组件扫描 上一篇文章我们讲到了annotat ...

  10. Linux网络服务第一章Linux网络基础设置

    1.笔记 systenctl restart network:重启网卡网络服务 bash:刷新主机名称 netstat:查看网络状态 route -n:不做地址解析 mii-tool eno16777 ...