XML语言数据读写理解12

首先我们从最底层的Nodets开始写起,然后逐步往上层实现。

在类里面定义一个函数:

QDomElement writeNodets(QDomDocument &doc);

注意参数是QDomDocument,因为你要靠这个参数来创建节点元素。

下面把函数附上:


QDomElement NodeTS::writeNodets(QDomDocument &doc)
{
	QDomElement NormalizedIntensityNode = doc.documentElement();
	NormalizedIntensityNode = doc.createElement("NormalizedIntensity");
	NormalizedIntensityNode.setAttribute("Value", NormalizedIntensity);
	QDomElement OpacityNode = doc.documentElement();
	OpacityNode = doc.createElement("Opacity");
	OpacityNode.setAttribute("Value",Opacity);
	QDomElement EmissionNode = doc.documentElement();
	EmissionNode = doc.createElement("Emission");
	EmissionNode.setAttribute("G", Emission.green());
	EmissionNode.setAttribute("R", Emission.red());
	EmissionNode.setAttribute("B", Emission.blue());
	QDomElement ccNode = doc.documentElement();
	ccNode = doc.createElement("Node");
	ccNode.appendChild(NormalizedIntensityNode);
	ccNode.appendChild(OpacityNode);
	ccNode.appendChild(EmissionNode);
	return ccNode;
}

其实跟之前的文件读写没有什么区别。我们创建每个元素,然后给它添加属性和属性值,然后归到一个节点里,最后作为返回值返回。如果读了博客前几章,一定就对这个很熟悉了。其实最近这几节的内容并没有什么新的知识,只是要求读者更加熟悉xml文件的结构以及对这种结构我们设计自己的类,然后并进行读写。设计的难度主要是在于层层递进性。

我们再进入到上一层,即使用tsfunItem来获取nodets的内容。我们定义一个函数:

QDomElement writeTsfunItem(QDomDocument &doc);
QDomElement TsfunItem::writeTsfunItem(QDomDocument &doc)
{
	QDomElement DensityScaleElement = doc.documentElement();
	DensityScaleElement = doc.createElement("DensityScale");
	DensityScaleElement.setAttribute("Value", DensityScale);
	QDomElement ShadingTypeElement =  doc.documentElement();
	ShadingTypeElement = doc.createElement("ShadingType");
	ShadingTypeElement.setAttribute("Value", ShadingType);
	QDomElement GradientFactorElement = doc.documentElement();
	GradientFactorElement = doc.createElement("GradientFactor");
	GradientFactorElement.setAttribute("Value", GradientFactor);
	
	QDomElement TsNodesElement = doc.documentElement();
	TsNodesElement = doc.createElement("Nodes");

	//DebugWidget::getDebugWidget()->addContents(QString::number(TsNodes.count()));
	for (int i = 0;i < TsNodes.count();i++) {
		TsNodesElement.appendChild(TsNodes[i].writeNodets(doc));
		
	}
	QDomElement itemNodes = doc.documentElement();
	itemNodes = doc.createElement("TsfunItem");
	itemNodes.setAttribute("Name", NameID);
	itemNodes.appendChild(TsNodesElement);
	itemNodes.appendChild(DensityScaleElement);
	itemNodes.appendChild(ShadingTypeElement);
	itemNodes.appendChild(GradientFactorElement);

	return itemNodes;
}

注意到在Nodes节点获取子节点的过程中我们就使用了上面刚设计好的TsNodes[i].writeNodets(doc);函数,在这里还是有很多与之前重复的内容,但是结构貌似越来越复杂了。在我完成整个读写的讲解以后,以及在实现节点某个的添加和删除程序之前,我会把整体的设计思路再给大家讲解一遍,以保证大家能够更好地理解我们的设计思路。下一节我们完成整个写文件的程序。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dezeming

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

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

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

打赏作者

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

抵扣说明:

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

余额充值