当前位置:网站首页>QT笔记——QtXml
QT笔记——QtXml
2022-07-22 08:12:00 【旧街凉风°】
头文件:#include <QtXml>
了解Xml:
1.文档声明必须为<?xml开头,以?>结束;
2.文档声明必须从文档的0行0列位置开始:
3.文档声明只有属性:
a) versioin:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0;
b) encoding:指定当前文档的编码。可选属性,默认值是。utf-8:
l 元素element
1.元素是XML文档中最重要的组成部分,
2.普通元素的结构开始标签、元素体、结束标签组成。例如:大家好
3.元素体:元素体可以是元素,也可以是文本,例如:你好
4.空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭介,例如:
5.元素命名:
a) 区分大小写
b) 不能使用空格,不能使用冒号:
c) 不建议以XML, xml, Xml开头
6.格式化良好的XML文档,必须只有一个根元素。
l 属性
1.属性是元素的一部分,它必须出现在元素的开始标签中
2.属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引
3.一个元素可以有O ~ N个属性,但一个元素中不能出现同名属性
4.属性名不能使用空格、冒号等特殊字符,且必须以字母开头
pro文件里面添加QT+=xml
1.打开Xml文件
2.解析Xml文件
3.读取Xml文件内容
增加Xml文件内容
删除Xml文件内容
移除Xml文件内容
修改Xml文件内容
4.保存内容到Xml文件中
1.打开Xml文件
QFile file("test.xml");
if (!file.open(QIODevice::ReadOnly))
return;
2.解析Xml文件并且判断是否有错误的内容
QString errorStr;
int errorLine;
int errorCol;
//解析XML
QDomDocument doc;
if (!doc.setContent(&file,true, &errorStr, &errorLine, &errorCol))
{
qDebug() << QStringLiteral("错误字符串:%1,错误行数:%2,错误列数:%3").arg(errorStr).arg(errorLine).arg(errorCol);
file.close();
return;
}
file.close();
3.创建Xml文件内容
//打开或创建文件
QFile file("test.xml"); //相对路径、绝对路径、资源路径都可以
if (!file.open(QFile::WriteOnly | QFile::Truncate)) //Truncate表示清空原来的内容
return;
QDomDocument doc;
//添加处理命令
QDomProcessingInstruction instruction;
instruction=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);
//创建dom的元素
QDomElement root = doc.createElement("library");
doc.appendChild(root);
//添加元素下的一个子节点
QDomElement book = doc.createElement("book");
//添加子节点标题的内容
//方法一; 创建元素属性 其中键值对的值可以是各种类型
book.setAttribute("id", 1);
//方法二:创建元素属性 值必须为字符串
QDomAttr time = doc.createAttribute("time");
time.setValue("2013/6/13");
book.setAttributeNode(time);
QDomElement title = doc.createElement("title");
//添加元素的内容
QDomText text = doc.createTextNode("C++ primer");
title.appendChild(text);
//将其加入到自己的父节点中
book.appendChild(title);
root.appendChild(book);
//写入文件
QTextStream stream(&file);
doc.save(stream, 4);
file.close();
读取XML文件内容
//返回根节点
QDomElement root = doc.documentElement();
qDebug() << root.nodeName(); // 将元素转化为根节点QString名称
//获取第一个子节点
QDomNode node = root.firstChild();
qDebug() << QStringLiteral("第一个子节点元素名称为:") << node.toElement().tagName();
qDebug() << QStringLiteral("第一个子节点的节点元素名称为:") << node.firstChildElement().nodeName();
//获取某个元素的属性
QDomElement e = node.toElement();
//tagName 和 nodeName 差不多
qDebug() << e.tagName() << " " << e.attribute("id") << " "<<e.attribute("time");
//获取某个节点的所有孩子节点
QDomNodeList list=e.childNodes();
//某个元素的内容,现将节点转为元素,再获取内容
qDebug()<<n.toElement().text();
QDomNode node = node.nextSibling(); //获取兄弟节点
QDomElement node = node.nextSiblingElement();//获取兄弟元素
删除XML内容
QDomElement root=doc.documentElement();
QDomNodeList list=doc.elementsByTagName("book"); //找到所有与该标签名相同的列表
//移除该节点
root.removeChild(list.at(i));
修改XML内容
QDomNode oldnode=node.firstChild(); //标签之间的内容作为节点的子节点出现,当前是Pride and Projudice
node.firstChild().setNodeValue("Emma");
QDomNode newnode=node.firstChild();
node.replaceChild(newnode,oldnode);
参考博客:
https://www.cnblogs.com/gaowc/p/10700348.html
https://blog.csdn.net/hpu11/article/details/80227093
边栏推荐
- Bigder:37/100 a misoperation
- 【案例分享】配置IS-IS的路由渗透功能
- Logistic regression (formula derivation +numpy Implementation)
- 逻辑回归(公式推导+numpy实现)
- go flag包
- JS String charAt substring() substr slice toUpperCase toLowerCase indexOf
- GBase8s数据库SET Database Object Mode 语句
- How does boss direct hire write an excellent resume?
- Rk3399 platform development series explanation (alsa subsystem) 4.37, alsa driven framework
- 力扣练习——30 设置交集大小至少为2
猜你喜欢
如何破解IT中年危机下的惨淡人生
逆袭黑马:数据库全栈工程师(DevDBOps)培训,把最好的课程送给您!
Concurrent model values actor and CSP
Super practical transformation strategy: 2022 central state-owned enterprise cloud native landing practical guide was officially released
Go concurrent programming - work pool
【OpenCV入门实战】利用电脑前置摄像头进行人脸检测
Bigder:38/100 a misoperation problem has been solved
Bigder: common business terms in 36/100 report testing
[exception] generate guid and datetime, import test data to the database
基础SQL Server 操作问题——仅当使用了列表并且IDENTITY_INSERT为ON时,才能为表中的标识列制定显示值
随机推荐
mysql存储过程返回的结果集的问题
zmq无锁队列的浅解
等额本金递增还款/等额本金递减按揭房贷还款计算器
GBase8s数据库使当前的连接成为休眠的连接
Methodology (I): how to quickly learn a programming language
二十四、TF坐标变换(四):多坐标变换及坐标系关系查看
Detailed explanation of bokeh parameter setting
Maintenance of gbase8s database constraint mode
Web3 sharing
Install vscode offline
GBase8s数据库SET Database Object Mode 语句
Oracle statement adjustment
Gbase8s database restrictions on set collection
How to solve the gloomy life under the middle-aged crisis of it
shell脚本使用expect自动化交互登录远程主机进行批量关机
VCs and Verdi learning records
[3D target detection] sparse convolution
MySQL和MariaDB区别
Teach you to write makefile files from 0
Aruba学习笔记04-Web UI --Configuration面板介绍