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个元素到底对不对,我们还得想办法在输出中测验测验,鉴于这些变量都是私有的,我们要再添加一些接口,作为留给下一节的任务。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dezeming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值