什么是C++最好的开放式XML解析器
What is the best open XML parser for C++?
我正在寻找一个简单、干净、正确的XML解析器,用于我的C++项目。我应该自己写吗?
RapidXML怎么样?RapidXML是一个用C++编写的非常快速、小型的XMLDOM解析器。它主要针对嵌入式环境、计算机游戏或任何其他可用内存或CPU处理能力很高的应用程序。RapidXML是根据Boost软件许可证授权的,其源代码是免费提供的。
功能
- 解析速度(包括DOM树建筑物)接近速度在上执行的strlen函数相同的数据
- 在现代CPU上(截至2008年)解析器吞吐量约为10亿每秒字符数。看见在线中的性能部分手册
- 代码占用的内存较小并创建DOM树
- 仅头的实现,简化了集成过程
- 允许使用的简单许可证几乎任何用途,都是商业用途和非商业性的,没有任何义务
- 支持UTF-8和部分UTF-16,UTF-32编码
- 不带的可移植源代码除了非常小的依赖项C++标准库的子集
- 这个子集非常小,可以如果使用,可以很容易地手动模拟的标准库是不希望的
限制
- 分析器忽略DOCTYPE声明
- 不支持XML命名空间
- 解析程序不检查字符有效性
- 解析程序的接口没有符合DOM规范
- 解析程序不检查属性唯一性
来源:维基百科。org://Rapidxml
根据您的使用情况,您可以使用XML数据绑定吗CodeSynthesis XSD是一个用于C++的XML数据绑定编译器,由Code Synthesis开发,并根据GNU GPL和专有许可证获得双重许可。给定一个XML实例规范(XMLSchema),它生成表示给定词汇表的C++类以及解析和序列化代码。
CodeSynthesis XSD的一个独特特性是它支持两种不同的XML模式到C++的映射:内存中的C++树和面向流的C++解析器。C++/Tree映射是一种传统的映射,具有类似树的内存中数据结构。C++/Parser是一种新的类似SAX的映射,它将存储在XML实例文档中的信息表示为特定于词汇表的解析事件的层次结构。与C++/Tree相比,C++/Parser映射允许处理不适合内存的大型XML文档、执行面向流的处理或使用现有的内存表示。
来源:维基百科。org://CodeSynthesisXSD
puixml-用于C的轻量级、简单快速的XML解析器++非常小(可与RapidXML相比)、非常快(可与快速XML相比),非常易于使用(比RapidXML更好)。
尝试TinyXML。
http://sourceforge.net/projects/tinyxml
TiCPP是TinyXML的"更多c++"版本。
"TiCPP"是TinyXML++官方名称的缩写。它是TinyXML的全新接口(http://www.grinninglizard.com/tinyxml/)它使用了许多C++的优点。模板、异常和更好的错误处理。它也在doxygen中有充分的记载。这真的很酷,因为这个版本可以让你以与以前完全相同的方式进行微小的接口,或者你可以选择使用新的"ticpp"类。您所需要做的就是定义TIXML_USE_TICPP。它已经在VC 6.0、VC 7.0、VC 7.1、VC 8.0、MinGW gcc 3.4.5和Linux GNU gcc 3+中进行了测试
试试这个:http://www.applied-mathematics.net/tools/xmlParser.html
它比RapidXML或PUGXML更简单、更快
TinyXML是最糟糕的"简单解析器"。
如果您关心效率/内存管理,请不要使用TinyXML(它倾向于分配许多的小块)。我个人最喜欢的是RapidXML。
gSOAP怎么样?它是开源的,在GPL许可证下免费提供。尽管名称如此,gSOAP工具包是一个通用的XML数据绑定工具,它允许您将C和C++数据自动绑定到XML。不需要使用XML解析器API,只需让它为您读/写XML格式的数据即可。如果您真的需要一个超级简单的C++XML解析器,那么gSOAP可能是一种过度使用。但在其他方面,自2001年gSOAP问世以来,它在许多工业应用程序中都表现得很好。
以下是功能的简要列表:
- 可移植:Windows、Linux、Mac OS X、Unix、VxWorks、Symbian、Palm OS、WinCE等
- 占地面积小:73KB的代码和不到2K的数据来实现XML web服务客户端应用程序(没有DOM来限制内存使用)
- 快速:不要相信其他工具所说的,真正的速度应该通过I/O来测量。对于gSOAP,它是通过TCP/IP的3000多条往返XML消息。XML解析开销可以忽略不计,因为它是在进行(反)序列化时对输入/输出进行的简单线性扫描
- XML支持:XML架构(XSD)导入/导出、WSDL导入/导出,XML名称空间、XML规范化、带附件的XML(MIME)、DOM的可选使用、生成带缩进的XML的许多选项、使用UTF8字符串等
- XML验证:部分和全部(选项)
- WS支持:WS-Security、WS-ReliableMessaging、WS-Addressing、WS-Policy、WS-SecurityPolicy和其他
- 调试:集成内存管理与泄漏检测、日志记录
- API:无需学习API,只需初始化"soap"引擎上下文,然后使用读/写接口对您的数据进行读取,并销毁"soap"发动机上下文
例如:
class Address
{
std::string name;
std::vector<LONG64> number;
time_t date;
};
然后在上面的Address
类声明上运行"soapcpp2"以生成soap_read_Address
和soap_write_Address
XML读取器和写入器,例如:
Address *a = new Address();
a = ...;
soap ctx = soap_new();
soap_write_Address(ctx, a);
soap_end(ctx);
soap_free(ctx);`
这将生成Address a
对象的XML表示。通过使用XML命名空间详细信息(此处未显示)注释头文件声明,这些工具还可以生成模式。这是一个简单的例子。gSOAP工具可以处理非常广泛的C和C++数据类型,包括基于指针的链接结构,甚至(循环)图(而不仅仅是树)。
希望这能有所帮助。
TinyXML最适合简单的XML工作,但如果您需要更多功能,请尝试apache项目中的Xerces。请转到下一页以了解有关其功能的更多信息。
http://xerces.apache.org/xerces-c/
TinyXML,以及Boost.PropertyTree。后者不能满足所有官方要求,但非常简单。
我是一个C++新手,在这个页面上尝试了几个不同的建议后,我必须说我最喜欢puixml。它有易于理解的文档和高水平的API,这正是我所寻找的。
我喜欢Gnome xml解析器。它是开源的(MIT许可证,所以您可以在商业产品中使用它),速度快,并且具有基于DOM和SAX的接口。
http://xmlsoft.org/
尝试TinyXML或IrrXML。。。两者都是轻量级的XML解析器(无论如何,我建议您使用TinyXML)。
- Cppcheck生成xml转储文件
- 如何在pugixml中获取节点的内部XML
- 如何使用tinyxml2从XML加载父实体和子实体
- boost xml parsingl将xml的路径作为变量发送
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 使用 Tinyxml 在 xml 中添加一个子子项
- 增强基于 XML class_id的反序列化
- 在 c++ 中使用 vtd-xml 时,如何摆脱 EOFException?
- 防止在C++中选择错误文件时提升 xml 解析器崩溃
- c++ 读取 xml 文件的内容
- 删除 XML 文件中的子节点C++
- 使用 RapidXML 更新C++中的 XML 节点和属性值
- 在Cmake构建CmakeList.txt中读取/解析XML文件
- 从 XML 中读取未指定结构的每个数据成员
- XML to XML XSLT transformation. MSXML in VBScript
- 将 QGraphicsView 或 Scene 转换为 XML/JSON
- Qt 写入 xml: QIODevice::write (QFile, "D:/logs.xml" ): 设备未打开
- 使用 libxml2 解析 XML 文件时缺少元素值
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 什么是C++最好的开放式XML解析器