- 特点
- 实现
- 相关文章
- 评论本文:
最优雅的XML解析器TinyXML
From: xuyibo.net Updated: 2021-06-02当更新时自动发送邮件通知。 | |
有什么建议或评论,可以贴一下。 | |
你的支持,让我们做的更好。 | |
用过微软的MSXML的用户一定厌烦其COM固有的烦人的特性,虽然MSXML非常出色,但我总不愿意在自己写的小巧的程序中嵌入这么庞大的一个家伙,这不是我风格。而apache的xerces-c更是让我汗颜,写软件能写成这样,我只能望洋兴叹,望尘莫及…而微软新出的XmlLite,依旧不能脱离其COM(讨厌的COM,让我不能小巷子赶猪)。而TinyXML却是我目前见过的最好的XML解析器,虽然有些缺点,而这些却是作者Lee Thomason, Yves Berquin, Andrew Ellerton们有意这么设计的。
×最快的解析器
TinyXML实现非常精简、优雅。当我看其源码的时候,我就在和suofanker说,即使是我,再锻炼三年,也不一定能写出这样的代码。灵活、简单、强大,这些都是我在设计一个软件时考虑的最重要的因素,TinyXML都做到了。
基于DOM的XML操作
TinyXML只实现了最基本的基于DOM的XML操作,对于结点数据,TinyXML没有做任何编码变换,比如一个UTF-8的xml,TinyXML读取后,不会将UTF-8的字符转换为GB2312,这些都留给了用户。对于美国人,他们可以happy到很,26个英文字母,不用担心任何的编码转换问题。
C++实现的
C语言实现一个类似的不是不可能,但实现起来可能就没有现在这样这么优雅。
主引擎
TiXmlDocument::Parse函数实现的,从TiXmlDocument继承的所有类都实现了Parse函数。 while (p && *p) { TiXmlNode* node = Identify(p, encoding); if (node) { p = node->Parse(p, &data;, encoding); LinkEndChild(node); } else { break; } // ... p = SkipWhiteSpace(p, encoding); }
特有的string buffer处理机制
每次需要字符串处理的时候,TiXmlString负责这件事情,TiXmlString通过分配一个头数据和需要的字符串长度那么大小的缓冲区,然后返回这块缓冲区给内部或外部做进一步处理。
微软新的XML API – XmlLite
MSXML使用教程
expat教程