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

XML语言数据读写理解10

    我们上一节讲完了读出Nodes和其他属性信息的程序,接下来我们把两个Item读到group里面。

#pragma once
#include <QObject>
#include "tsfunitem.hpp"

class TsfunGroup : public QObject {
	Q_OBJECT

public:
	TsfunGroup(QObject * parent = Q_NULLPTR);
	~TsfunGroup();

	TsfunItemList tsfitmlist;
	QDomDocument xmlFile;
	void readXML(const QString& filename);

private:
	QString filename;

};

    注意 TsfunItemList 是前文定义的存放 TsfunItem 的列表。关键就是readMXL文件了:

#include "tsfungroup.hpp"
#include "debugwidget.hpp"
TsfunGroup::TsfunGroup(QObject * parent) : QObject(parent) {
	
}

TsfunGroup::~TsfunGroup() {
	
}

    先把无关紧要的两个函数放进去,接下来是函数:

void TsfunGroup::readXML(const QString& filename)
{
    
}

    为了看着更简洁,我们一段一段的解释程序:

    DebugWidget *dw = new DebugWidget;
	QFile file("C:\\Developer\\Rendering\\Rendering\\XML\\transferfunction.xml");
	if (!file.open(QIODevice::ReadOnly))
		dw->addContents("error 1");
	if (!xmlFile.setContent(&file))
	{
		file.close();
		dw->addContents("error 2");
	}
	file.close();
	//这里有类似于version这样的第一个子节点信息。
	QDomNode firstChild = xmlFile.firstChild();
	if (firstChild.nodeName() == "xml") {
		dw->addContents(firstChild.nodeName());
		dw->addContents(firstChild.nodeValue());
	}
	else {
		dw->addContents("No version , No Format");
	}dw->addContents("");

    这一段其实也没有什么特别的,之前都讲过很多遍了。打印出来的效果如下:

xml
version='1.0' encoding='UTF-8'

    之后我们读取根元素并打印:

        //读取根元素<TsfunGroup>
	QDomElement root = xmlFile.documentElement();
	dw->addContents("[" + root.tagName() + "]");
	dw->addContents("");

    这个之前也讲了很多遍了,综合打印效果如下:

xml
version='1.0' encoding='UTF-8'

[TsfunGroup]

    

QDomNode TsfunItem1 = root.firstChild();
//dw->addContents(TsfunItem1.toElement().tagName());
while (!TsfunItem1.isNull())
{
	dw->addContents(TsfunItem1.toElement().tagName()+" "+ TsfunItem1.toElement().attribute("Name"));

	TsfunItem tsfunitemdata;
	tsfunitemdata.readTsfunItem(TsfunItem1.childNodes());
	tsfitmlist.append(tsfunitemdata);
		
	dw->addContents(QString::number(tsfunitemdata.returnNumOfNodes()));

	TsfunItem1 = TsfunItem1.nextSiblingElement();
}

    循环和以前套路差不多,区别就是直接在里面使用了readTsfunItem(TsfunItem1.childNodes()); ,它读取了TsfunItem1里面的数据,然后TsfunItem1迭代到下一个TsfunItem,之后再读出来。打印效果如下:

xml
version='1.0' encoding='UTF-8'

[TsfunGroup]

TsfunItem normalMode
6
TsfunItem maxMode
6

    说明确实读出来了里面的6个元素,但是这6个元素到底对不对,我们还得想办法在输出中测验测验,鉴于这些变量都是私有的,我们要再添加一些接口,作为留给下一节的任务。

 

 

 

 

相关文章:

  • 简易的QT输出调试器
  • 简易的QT输出调试器2
  • XML语言数据读写理解11
  • XML语言数据读写理解12
  • XML语言数据读写理解13
  • XML语言数据读写理解14
  • XML语言数据读写理解15
  • XML语言数据读写理解16
  • QT图形显示和处理1
  • QT图形显示和处理2 坐标系统(重点)
  • QT图形显示和处理3 坐标系统(重点)
  • QT图形显示和处理4
  • QT图形显示和处理5
  • QT图形显示和处理6
  • QT图形显示和处理7
  • Apache Pulsar 2.1 重磅发布
  • codis proxy处理流程
  • GraphQL学习过程应该是这样的
  • iOS小技巧之UIImagePickerController实现头像选择
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Vue.js 移动端适配之 vw 解决方案
  • web标准化(下)
  • 浮动相关
  • 关于 Cirru Editor 存储格式
  • 后端_MYSQL
  • 聊聊hikari连接池的leakDetectionThreshold
  • 那些年我们用过的显示性能指标
  • 巧用 TypeScript (一)
  • 使用parted解决大于2T的磁盘分区
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 译有关态射的一切
  • 主流的CSS水平和垂直居中技术大全
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 函数计算新功能-----支持C#函数
  • ​比特币大跌的 2 个原因
  • # 数论-逆元
  • #pragam once 和 #ifndef 预编译头
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二)springcloud实战之config配置中心
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (三)mysql_MYSQL(三)
  • (转) Android中ViewStub组件使用
  • (转)JAVA中的堆栈
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (状压dp)uva 10817 Headmaster's Headache
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .gitignore