关于在C++中解析XML等问题已经提出了很多问题......但是,我的问题非常具体,而不是一般问题.
我要求一个非常有效的C++ XML解析器.特别是我有一个非常非常大的XML文件来解析.我的应用程序必须打开此文件并检索数据.它还必须插入新节点并再次将最终结果保存在文件中.
为了做到这一点,我在开始时使用了rapidxml,但它要求我打开文件,解析所有内容(所有内容因为这个lib没有直接访问文件的功能而不先加载整个树),然后编辑树,修改它并通过覆盖它将最终树存储在文件上...它消耗了太多的资源.
是否有一个XML解析器,不需要我加载整个文件,但我可以用来快速插入新节点和检索数据?你能指出我这个问题的解决方案吗?
Dan*_*ien 10
您需要流式XML解析器而不是所谓的DOM解析器.
有两种类型的流解析器:拉和推.pull解析器适用于快速编写将数据加载到程序存储器中的XML解析器.推送解析器适用于编写程序以将一个文档转换为另一个文档(这是您要完成的任务).因此,我认为推送解析器最适合您的问题.
为了使用推送解析器,您需要编写本质上是用于解析事件的事件处理程序.通过"解析事件",我的意思是"达到开始标记","达到结束标记","找到文本","解析属性"等事件.
我建议您在阅读文档时,将转换后的文档写入单独的临时文件.因此,您需要编写XML解析事件处理程序,以便它们是有状态的,并逐步写出已翻译文档的XML.
C++的三个优秀推送解析器库包括Expat,Xerces-C++和libxml2.