当前位置: 首页 > news >正文

XML语言数据读写理解5

    现在我们再讲一下应该怎么把数据写成XML文件。

    还是以例子入手,假设我们已经有了前面章节例子的数据,这一节我们考虑怎么把这些数据按照xml文件格式写入到xml文件里面。

首先列一下我们需要写入的数据:

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<Mode>
	<firstEle>
		<A id = "1">
			<T param1="42323" param2="2356" param3= "3d2"/>
			<R param1="6256" param2="23562" param3= "f232f"/>
		</A> <!-- childNode.nextSibling() 寻找下一个兄弟节点 -->
		<A id = "2">
			<R param1="433f3f" param2="frsfs" param3= "f2g34g"/>
			<R param1="243442" param2="324232" param3= "j665"/>
		</A>
		<B id = "3">
			<B param1="sdfsdfs" param2="fef2" param3= "43tg"/>
			<W param1="123123" param2="32ff" param3= "efea"/>
		</B>
	</firstEle>
	<secondEle>
		<C id = "4">
			<B param1="143221" param2="kyr5y" param3= "fwf"/>
			<B param1="124531" param2="4g4gs" param3= "4w4g"/>
		</C>
		<D id = "5">
			<B param1="13231233" param2="3qfgg" param3= "44444tw"/>
			<B param1="45435" param2="aacevev" param3= "dghh"/>
		</D>
	</secondEle>
</Mode>
<Mode2>
	<firstEle2>
		<A id = "1">
			<T param1="42323" param2="2356" param3= "3d2"/>
			<R param1="6256" param2="23562" param3= "f232f"/>
		</A> <!-- childNode.nextSibling() 寻找下一个兄弟节点 -->
		<A id = "2">
			<R param1="433f3f" param2="frsfs" param3= "f2g34g"/>
			<R param1="243442" param2="324232" param3= "j665"/>
		</A>
		<B id = "3">
			<B param1="sdfsdfs" param2="fef2" param3= "43tg"/>
			<W param1="123123" param2="32ff" param3= "efea"/>
		</B>
	</firstEle2>
	<secondEle2>
		<C id = "4">
			<B param1="143221" param2="kyr5y" param3= "fwf"/>
			<B param1="124531" param2="4g4gs" param3= "4w4g"/>
		</C>
		<D id = "5">
			<B param1="13231233" param2="3qfgg" param3= "44444tw"/>
			<B param1="45435" param2="aacevev" param3= "dghh"/>
		</D>
	</secondEle2>
</Mode2>
</ROOT>

    写入的第一件事:打开文件。

QString fileName{ "Motor.xml" };
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
	qDebug() << "open for add error!!";
}
//输出到文件
QTextStream out_stream(&file);
out_stream<<"It is a test. ";
file.close();

    运行以后打开文件,里面出现了It is a test. 的字样,表示文件成功打开了。

    接下来就是创建XML的数据结构了:

//打开或创建文件
	QString fileName{ "Motor.xml" };
	QFile file(fileName);

QDomDocument doc;
QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml",                     
      "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);

/**以后内容都在这里逐步补全**/

//输出到文件
QTextStream out_stream(&file);
doc.save(out_stream, 4); //缩进4格
file.close();

    首先创建一个fileName文件,然后使用QDomDocument 创建一个对象,接下来就很简单明白了,注意要把instruction加入到doc的子节点里面。否则啥也不会输出到文件里去。

    输入结果如下:

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

     之后我们要把根节点加进去:

QDomElement root = doc.documentElement();
root = doc.createElement("ROOT");
doc.appendChild(root);

    注意这里的root是一个QDomElement元素,直接加到了doc的子节点里,这时候文件输出如下:

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

    要注意的是,这个<Mode/>和</Mode>可不是同一个东西!<Mode/>展开就可以写作<Mode></Mode>。如果我们强行加了两个根节点进去,虽然输出没有问题,但是用浏览器等打开是会有问题的。

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

    再在下面写入:

	QDomElement mode = doc.documentElement();
	mode = doc.createElement("Mode");
	QDomElement mode2 = doc.documentElement();
	mode2 = doc.createElement("Mode2");
	root.appendChild(mode);
	root.appendChild(mode2);

    和上面类似,只不过我们是把mode加入到了root的子节点里,效果显示如下:

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
    <Mode/>
    <Mode2/>
</ROOT>

    之后,我们要在Mode里添加子节点。程序以及显示效果如下:

	QDomElement firstEle = doc.documentElement();
	firstEle = doc.createElement("firstEle");
	QDomElement secondEle = doc.documentElement();
	secondEle = doc.createElement("secondEle");
	QDomElement firstEle2 = doc.documentElement();
	firstEle2 = doc.createElement("firstEle2");
	QDomElement secondEle2 = doc.documentElement();
	secondEle2 = doc.createElement("secondEle2");
	mode.appendChild(firstEle);
	mode.appendChild(secondEle);
	mode2.appendChild(firstEle2);
	mode2.appendChild(secondEle2);
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
    <Mode>
        <firstEle/>
        <secondEle/>
    </Mode>
    <Mode2>
        <firstEle2/>
        <secondEle2/>
    </Mode2>
</ROOT>

    可以看到结构已经基本成型了,接下来就是最后的数据填充了。下一节我们再介绍。

相关文章:

  • XML语言数据读写理解6
  • XML语言数据读写理解7
  • XML语言数据读写理解8
  • XML语言数据读写理解9
  • XML语言数据读写理解10
  • 简易的QT输出调试器
  • 简易的QT输出调试器2
  • XML语言数据读写理解11
  • XML语言数据读写理解12
  • XML语言数据读写理解13
  • XML语言数据读写理解14
  • XML语言数据读写理解15
  • XML语言数据读写理解16
  • QT图形显示和处理1
  • QT图形显示和处理2 坐标系统(重点)
  • ➹使用webpack配置多页面应用(MPA)
  • Angular 响应式表单 基础例子
  • chrome扩展demo1-小时钟
  • CSS 提示工具(Tooltip)
  • GitUp, 你不可错过的秀外慧中的git工具
  • Hibernate最全面试题
  • python docx文档转html页面
  • Python socket服务器端、客户端传送信息
  • python学习笔记-类对象的信息
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • vue-cli3搭建项目
  • 从零开始的无人驾驶 1
  • 码农张的Bug人生 - 初来乍到
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 我的业余项目总结
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 再次简单明了总结flex布局,一看就懂...
  • raise 与 raise ... from 的区别
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 进程与线程(三)——进程/线程间通信
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #FPGA(基础知识)
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (八)Spring源码解析:Spring MVC
  • (第一天)包装对象、作用域、创建对象
  • (三)elasticsearch 源码之启动流程分析
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转)菜鸟学数据库(三)——存储过程
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .libPaths()设置包加载目录
  • .net FrameWork简介,数组,枚举
  • .net mvc 获取url中controller和action
  • .NET Remoting学习笔记(三)信道
  • .NET 表达式计算:Expression Evaluator
  • .netcore如何运行环境安装到Linux服务器
  • .NET企业级应用架构设计系列之开场白
  • /etc/sudoers (root权限管理)
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @AliasFor注解