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结构里。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dezeming

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

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

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

打赏作者

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

抵扣说明:

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

余额充值