你不再需要TinyXML,推荐RapidXML
2016-06-20 00:00
465 查看
TinyXML有两个不爽的地方,一是它的接口使用FILE*,另外一个是它对 wchar_t不能很好的支持。前阵子看Boost库的更新中多了一个PropertyTree,他在处理XML时用到了另外一个小的库 –RapidXML。既然间接的是Boost库的一部分,所以是值得一试的。于是找到其官方网站(http://rapidxml.sourceforge.net/)研究了一番。一看之下,甚是满意,也推荐给大家看看!
首先就是速度,据它自己宣称比TinyXML快30到60倍,比Xerces DOM快50到100倍!详细的测试比较请见其用户手册(http://rapidxml.sourceforge.net/manual.html)的“4. Performance ”一节。
其次它的设计非常的简洁,只依赖于标准库中的几个基本的类。它的输入输出都是字符串,这样很好,一个库就应该关注自己核心的内容,做尽量少的事情。它的API其实和TinyXML倒是有几分相似,用过TinyXML的人应该很容易上手:
TinyXML主要接口类 RapidXML的主要接口类
TinyXML主要接口类
RapidXML的主要接口类
class TiXmlDocument
template<class Ch = char>
class xml_document
class TiXmlNode
template<class Ch = char>
class xml_node
class TiXmlAttribute
template<class Ch = char>
class xml_attribute
下面还是看一个具体的例子来体验一下,下面是TinyXML官方教程中创建XML文档的一段代码:
void build_simple_doc( )
{
// Make xml: <?xml ..><Hello>World</Hello>
TiXmlDocument doc;
TiXmlDeclaration * decl = new TiXmlDeclaration( “1.0″, “”, “” );
TiXmlElement * element = new TiXmlElement( “Hello” );
TiXmlText * text = new TiXmlText( “World” );
element->LinkEndChild( text );
doc.LinkEndChild( decl );
doc.LinkEndChild( element );
doc.SaveFile( “madeByHand.xml” );
}
下面是使用RapidXML实现类似功能的代码:
void build_simple_doc_by_rapidxml()
{
xml_document<> doc;
xml_node<>* decl = doc.allocate_node(node_declaration);
xml_attribute<>* decl_ver =
doc.allocate_attribute(“version”, “1.0″);
decl->append_attribute(decl_ver);
doc.append_node(decl);
xml_node<>* node =
doc.allocate_node(node_element, “Hello”, “World”);
doc.append_node(node);
string text;
rapidxml::print(std::back_inserter(text), doc, 0);
// write text to file by yourself
}
下面是使用RapidXML分析XML的样例代码:
void parse_doc_by_rapidxml(char* xml_doc)
{
xml_document<> doc; // character type defaults to char
doc.parse<0>(xml_doc); // 0 means default parse flags
xml_node<> *node = doc.first_node(“Hello”);
string node_val = node->value();
}
好东西,大家分享!:D
首先就是速度,据它自己宣称比TinyXML快30到60倍,比Xerces DOM快50到100倍!详细的测试比较请见其用户手册(http://rapidxml.sourceforge.net/manual.html)的“4. Performance ”一节。
其次它的设计非常的简洁,只依赖于标准库中的几个基本的类。它的输入输出都是字符串,这样很好,一个库就应该关注自己核心的内容,做尽量少的事情。它的API其实和TinyXML倒是有几分相似,用过TinyXML的人应该很容易上手:
TinyXML主要接口类 RapidXML的主要接口类
TinyXML主要接口类
RapidXML的主要接口类
class TiXmlDocument
template<class Ch = char>
class xml_document
class TiXmlNode
template<class Ch = char>
class xml_node
class TiXmlAttribute
template<class Ch = char>
class xml_attribute
下面还是看一个具体的例子来体验一下,下面是TinyXML官方教程中创建XML文档的一段代码:
void build_simple_doc( )
{
// Make xml: <?xml ..><Hello>World</Hello>
TiXmlDocument doc;
TiXmlDeclaration * decl = new TiXmlDeclaration( “1.0″, “”, “” );
TiXmlElement * element = new TiXmlElement( “Hello” );
TiXmlText * text = new TiXmlText( “World” );
element->LinkEndChild( text );
doc.LinkEndChild( decl );
doc.LinkEndChild( element );
doc.SaveFile( “madeByHand.xml” );
}
下面是使用RapidXML实现类似功能的代码:
void build_simple_doc_by_rapidxml()
{
xml_document<> doc;
xml_node<>* decl = doc.allocate_node(node_declaration);
xml_attribute<>* decl_ver =
doc.allocate_attribute(“version”, “1.0″);
decl->append_attribute(decl_ver);
doc.append_node(decl);
xml_node<>* node =
doc.allocate_node(node_element, “Hello”, “World”);
doc.append_node(node);
string text;
rapidxml::print(std::back_inserter(text), doc, 0);
// write text to file by yourself
}
下面是使用RapidXML分析XML的样例代码:
void parse_doc_by_rapidxml(char* xml_doc)
{
xml_document<> doc; // character type defaults to char
doc.parse<0>(xml_doc); // 0 means default parse flags
xml_node<> *node = doc.first_node(“Hello”);
string node_val = node->value();
}
好东西,大家分享!:D
相关文章推荐
- 男人25岁前的忠告#必阅
- IE10无法打开,需要管理员权限才能打开
- FMOD音频引擎简单使用
- DirectX9.0教程之ID3DXSprite篇[转载]
- 限时免费抢!正版卡巴斯基安全部队2011激活码1年
- WinCE中如何获取PDA的ID码
- 忍者
- 使用VMware虚拟磁盘管理工具调整磁盘大小
- Nebula3的Input系统
- Lua第三方插件列表
- DirectX 图形接口指南
- 失眠的调养
- 点绛唇
- 测试Windows Live Writer
- C# 关闭显示器的函数
- 奇迹世界服务器架构(2)
- VS2005 SP1安装注意事项
- 关于部分Vista驱动丢失的解决办法
- 珊瑚虫版QQ被判侵犯腾讯著作权 可能停止更新
- IOCP中的socket错误和资源释放处理方法