TinyXml从内存中解析,并保存到内存

来源:互联网 发布:淘宝诈骗报警能找回 编辑:程序博客网 时间:2024/06/05 17:39

 网上介绍TinyXml的例子很多,所以不用再介绍了。最近也需要解析XML,从网上找了一下,发现TinyXml是最合适的。

TinyXml同时支持Windows和Linux平台,而且它很小巧,功能也全面,包括对XML各种特性的操作。

不过美中不足,虽然网上的应用实例很多,但是大部分都是从文件中解析和把数据保存到文件中的。而我需要的是解析内存中的数据,并且需要把数据保存到内存中。

 TinyXml的在线帮助文档URL:http://www.grinninglizard.com/tinyxml2docs/index.html

首先要提一下,TinyXml把Xml数据里面的标签、属性、声明、注释、值等都看做是“节点”,体现在数据结构里就是TiXmlNode。

因为条件限制,现在不能做测试用例,就把用法写一下吧,希望对大家有帮助。

从内存中加载数据:

const char *cszXml = "<?xml version="1.0"?><BOOK><BOOKNAME>XML</BOOKNAME></BOOK>";TiXmlDocument doc;doc.Parse(cszXml);if (true == doc.Error()){cout << "Parse XML data error: " << doc.ErrorDesc() << endl;return;}

将数据保存到内存中:

TinyXml可以将数据保存到文件,也可以打印到屏幕上,当然,也可以直接保存到内存中,其实也是应用的它的打印功能。

extern TiXmlDocument doc;//! XML文档extern char szXml[];//! 存放结果字符串TiXmlPrinter printer;printer.VisitEnter(doc);// printer.SetIndent("");//! 设置每行开头的标识符,默认是4个空格// printer.SetLineBreak("");//! 设置行分隔符,默认"\r\n"// !上面两行可以用这一行替代printer.SetStreamPrinting();//! 设置开头的标识符为"",行分隔符为""sprintf(szXml, printer.CStr());//! 将结果保存到szXml中,C风格字符串//! int nSize = printer.Size();//! 字符串长度

顺便捎带一句:

判断一个标签是否有子标签:

extern TiXmlElement xmlElem;if (xmlElem.FistChildElement() ){     // TODO: 有子标签}else{     // TODO: 没有子标签}

GAME OVER!

写的很简单,不过希望对大家有用。