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

XML语言数据读写理解13

最后就是在tsfunGroup类里面定义函数:

void writeXML();

因为不再需要什么返回值了。源码如下:

void TsfunGroup::writeXML() {
	writeFile.clear();
	QDomProcessingInstruction instruction = writeFile.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
	writeFile.appendChild(instruction);
	QDomElement root = writeFile.documentElement();
	root = writeFile.createElement("TsfunGroup");
	writeFile.appendChild(root);

	DebugWidget::getDebugWidget()->addContents(QString::number(tsfitmlist.count()));

	for (int i = 0;i < tsfitmlist.count();i++) {
		root.appendChild(tsfitmlist[i].writeTsfunItem(writeFile));
	}

	QString fileName{ "C:\\Developer\\Rendering\\Rendering\\XML\\bbescat.xml" };
	QFile file(fileName);
	if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
	{

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

}

由于这个结构设计的还不错,所以现在这个代码写起来也不是很费劲。前面还和以前一样。为了方便我就直接把 "version=\"1.0\" encoding=\"UTF-8\" "作为参数来创建了。其实这句话一般也用不着。

之后就是常规的创建根节点,创建子节点之类的。在循环中我们调用了上层的函数。

最后,创建文件,然后写入,保存。

要注意的是我们生成的文件所用到的所有数据与读xml文件的对象xmlFile是一点关系都没有的,因为我们是直接用数据来创建的xml文件。这和直接用读取的xml文件是有本质区别的。

做到这里,整个读写的程序就已经基本结束了。在接下来讲实现自由添加或者删除节点的功能之前,我们再回过头来回顾一下整个工程:

首先,我们根据整个文件的结构设计了最底层的Nodets来存储三个最底层的节点和属性:

<NormalizedIntensity Value="0"/>
<Opacity Value="0"/>
<Emission G="0" R="0" B="0"/>

之后,针对上一级的节点,我们设置了 tsfunItem来存储每一个 TsfunItem

<TsfunItem Name="normalMode">
        <Nodes>
        </Nodes>
        <DensityScale Value="100"/>
        <ShadingType Value="2"/>
        <GradientFactor Value="3"/>
    </TsfunItem>

然后又设计了group来存储每个tsfunItem。

<?xml version="1.0" encoding="UTF-8"?>
<TsfunGroup>
    <TsfunItem Name="normalMode">
    </TsfunItem>
    <TsfunItem Name="maxMode">
    </TsfunItem>
</TsfunGroup>

读取也是同样的设计顺序,先把Nodets里面的数据构建节点,生成DomElement的对象。

然后再实现上一级的DomElement对象。

最后再加入根节点,构建整个XML类,最后将整个类进行输出到文件中。

下一节我们再讲如何把数据构成节点,然后添加到xml结构里。

 

 

相关文章:

  • XML语言数据读写理解14
  • XML语言数据读写理解15
  • XML语言数据读写理解16
  • QT图形显示和处理1
  • QT图形显示和处理2 坐标系统(重点)
  • QT图形显示和处理3 坐标系统(重点)
  • QT图形显示和处理4
  • QT图形显示和处理5
  • QT图形显示和处理6
  • QT图形显示和处理7
  • QT图形显示和处理8
  • QT传输函数控件设计1 引子
  • QT传输函数控件设计2 体渲染和VTK
  • QT传输函数控件设计3 QVTKWidget和QT图形界面的融合
  • QT传输函数控件设计4 接着进行融合
  • 《Java编程思想》读书笔记-对象导论
  • 〔开发系列〕一次关于小程序开发的深度总结
  • ES2017异步函数现已正式可用
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • IP路由与转发
  • Java读取Properties文件的六种方法
  • nginx 配置多 域名 + 多 https
  • python docx文档转html页面
  • SAP云平台里Global Account和Sub Account的关系
  • Spark学习笔记之相关记录
  • Twitter赢在开放,三年创造奇迹
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 移动端唤起键盘时取消position:fixed定位
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (10)STL算法之搜索(二) 二分查找
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Oracle)SQL优化技巧(一):分页查询
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net MySql
  • .Net 高效开发之不可错过的实用工具
  • .NET/C# 使用反射注册事件
  • .sh 的运行
  • @开发者,一文搞懂什么是 C# 计时器!
  • [20181219]script使用小技巧.txt
  • [C#] 如何调用Python脚本程序
  • [C++核心编程](四):类和对象——封装
  • [Contest20180313]灵大会议
  • [CTO札记]盛大文学公司名称对联
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!
  • [dart学习]第四篇:函数