TinyXML生成xml文件
2009-03-31 16:30
609 查看
声明:欢迎任何人和组织转载本blog中文章,但必须标记文章原始链接和作者信息。
本文链接:http://blog.csdn.net/li_007/archive/2009/03/31/4038989.aspx
开拓进取的小乌龟------->CSDN点滴点点滴滴Blog
前面简单介绍了TinyXML,顺便写了一个简单的例子来测试利用TinyXML生成xml文件,其实代码实现很简单。如下:
运行后利用IE 8.0打开截图如下:
好了,看后就知道很简单的,这也是我选择它的一个原因,但这里做很简单的测试,没有对xml进行验证代码实现,但是TinyXML自己带的test Application中有对xml进行验证的函数,大家有兴趣可以去看。
代码很简单不啰嗦,说点别的,仔细看看代码,其中使用了很多new来建立了对象指针,但是只看到一个delete,也许你会说着会引起内存泄漏,其实在上面的函数中,后面的delete也可以不要,并且还不会造成内存泄漏。原因看看TinyXML实现的源码中TiXmlNode的析构函数的实现代码如下:当然顺便注意下所有的类的虚拟构造函数。
在结合一下前面文章介绍TinyXML的继承图表就清楚了为什么这儿不需要我们手动释放堆栈了,特别是不需要一个一个地释放,只需要最后释放最高节点就可以,比如TiXmlDocument节点。。。。。。在我实现的函数中其实也可以不需要delete xmlDocs这句的,因为他们都是局部变量,当变量的作用域结束的时候,会自动释放。当然使用delete会触发相应的class的析构函数的调用,这些都是C++的实现机制,在次不多说。
BTW:正是由于上面的原理,我们添加到TinyXML中的节点。。。都必须是动态用new来创建的。如果创建的不是指针,在内存释放的时候会出现错误的,这个可以自己去测试。我想TinyXML这样实现是因为TInyXML实现机制的要求,因为它是基于DOM,所有的节点都是在内存中。
<a href="http://www.vdoing.com" mce_href="http://www.vdoing.com" title="Vdoing StatsX No.54977"><img src="http://simg.vdoing.com/m/54977/x01.gif?noscript" mce_src="http://simg.vdoing.com/m/54977/x01.gif?noscript" border="0"></a>
本文链接:http://blog.csdn.net/li_007/archive/2009/03/31/4038989.aspx
开拓进取的小乌龟------->CSDN点滴点点滴滴Blog
前面简单介绍了TinyXML,顺便写了一个简单的例子来测试利用TinyXML生成xml文件,其实代码实现很简单。如下:
void WrittingXML(TiXmlString & xmlFile) { TiXmlDeclaration * xmlDec = new TiXmlDeclaration("1.0", "UTF-8", "yes"); TiXmlDocument * xmlDocs = new TiXmlDocument(); xmlDocs->LinkEndChild(xmlDec); TiXmlElement * element = new TiXmlElement("Document"); xmlDocs->LinkEndChild(element); TiXmlComment * comment = new TiXmlComment(" This is a list of new books "); element->LinkEndChild(comment); TiXmlElement * book = new TiXmlElement("Book"); book->SetAttribute("Name", "How to use TinyXML"); element->LinkEndChild(book); TiXmlElement * author = new TiXmlElement("Author"); TiXmlText * Authortext = new TiXmlText("Leezhm"); author->LinkEndChild(Authortext); book->LinkEndChild(author); TiXmlElement * date = new TiXmlElement("Date"); TiXmlText * Datetext = new TiXmlText("2009-3-30"); date->LinkEndChild(Datetext); book->LinkEndChild(date); xmlDocs->SaveFile(xmlFile.c_str()); delete xmlDocs; }
运行后利用IE 8.0打开截图如下:
好了,看后就知道很简单的,这也是我选择它的一个原因,但这里做很简单的测试,没有对xml进行验证代码实现,但是TinyXML自己带的test Application中有对xml进行验证的函数,大家有兴趣可以去看。
代码很简单不啰嗦,说点别的,仔细看看代码,其中使用了很多new来建立了对象指针,但是只看到一个delete,也许你会说着会引起内存泄漏,其实在上面的函数中,后面的delete也可以不要,并且还不会造成内存泄漏。原因看看TinyXML实现的源码中TiXmlNode的析构函数的实现代码如下:当然顺便注意下所有的类的虚拟构造函数。
TiXmlNode::~TiXmlNode() { TiXmlNode* node = firstChild; TiXmlNode* temp = 0; while ( node ) { temp = node; node = node->next; delete temp; } }
在结合一下前面文章介绍TinyXML的继承图表就清楚了为什么这儿不需要我们手动释放堆栈了,特别是不需要一个一个地释放,只需要最后释放最高节点就可以,比如TiXmlDocument节点。。。。。。在我实现的函数中其实也可以不需要delete xmlDocs这句的,因为他们都是局部变量,当变量的作用域结束的时候,会自动释放。当然使用delete会触发相应的class的析构函数的调用,这些都是C++的实现机制,在次不多说。
BTW:正是由于上面的原理,我们添加到TinyXML中的节点。。。都必须是动态用new来创建的。如果创建的不是指针,在内存释放的时候会出现错误的,这个可以自己去测试。我想TinyXML这样实现是因为TInyXML实现机制的要求,因为它是基于DOM,所有的节点都是在内存中。
<a href="http://www.vdoing.com" mce_href="http://www.vdoing.com" title="Vdoing StatsX No.54977"><img src="http://simg.vdoing.com/m/54977/x01.gif?noscript" mce_src="http://simg.vdoing.com/m/54977/x01.gif?noscript" border="0"></a>
相关文章推荐
- 通过ANT实现jmeter批量执行脚本、生成报告、发送邮件全套build.xml文件
- LINQ 从 CSV 文件生成 XML
- xml生成xsd文件的方法
- SS5.1_Hibernate_IdStrategyXML ~ SS5.5_Hibernate_IdStrategyXML 主键生成策略 XML映射文件的方式
- 用VB将WORD文档(或其他的二进制数据)生成xml文件并互相转换
- intellij配置hibernate自动生成hbm.xml文件
- dom4j 为生成 XML 的文件添加 xmlns(命名空间) 属性
- android 用pull生成xml,没有报错,但是文件根目录并没有生成xml文件?
- SEO_ASP.net SEO优化(包含URL地址重写\viewState移动和压缩至服务器\SEO信息XML生成_根据URL地址重写文件)\web网站内容压缩 源码公开.本人授权可使用于商业项目。
- 使用dom4j生成xml文件
- python菜鸟升级路--自动化解析生成xml文件
- 转载:如何使用XCodeFactory自动生成XML配置文件和对应的解析类
- VS2005 XML注释生成XML文档文件
- c# 生成 xml 文件
- 数据源+freemarker+servlet生成xml文件
- 通过excel可识别的xml结构直接生成xls文件
- 使用boost property_tree 生成XML配置文件
- 用VB将WORD文档(或其他的二进制数据)生成xml文件并互相转换
- 使用w3c生成xml文件
- generator-mybatis-generator-1.3.6生成实体类和Mapper.xml文件详解