代码之家  ›  专栏  ›  技术社区  ›  SmacL

MFC C++应用程序的最佳XML序列化库

  •  5
  • SmacL  · 技术社区  · 17 年前

    我有一个应用程序,用C++和MFC和StReGrand库编写。该应用程序使用各种各样的大型数据类型,这些类型当前都是基于MFC文档/视图序列化派生功能序列化的。我还添加了基于Stingray库的XML序列化选项,该库通过Microsoft XML SDK实现了DOM。虽然易于实现的性能是糟糕的,但在某种程度上,它除了非常小的文档之外是不能使用的。

    对于这个场景,大家会推荐什么其他XML序列化工具。我不想要DOM,因为它似乎是一个内存占用器,而且我已经在处理大量的内存数据。理想情况下,我想要一个快速,易于与MFC一起使用的流式解析器。我现在的领跑者是 expat 这是快速和简单的,但需要添加大量的逐类序列化代码。人们会推荐其他更有效、更容易实施的替代方案吗?

    8 回复  |  直到 8 年前
        1
  •  4
  •   Serge Wautier    17 年前

    这个 Boost Serialization 库支持XML。这个库基本上包括:

    1. 从MFC序列化的原则开始,并接受它提供的所有好处。
    2. 解决MFC序列化的每个问题!

    与MFC相比,改进之处之一是对XML的支持。 注意,您不必控制这个序列化的XML模式。它使用自己的模式。

        2
  •  4
  •   user272479    16 年前

    这是一个古老的问题。我是开发团队的团队领导,在1999年和2000年期间,我对世界上最大的软件项目拥有最关键的依赖路径,这个问题是我在这段时间内工作的重点。我相信轮子是由多名工程师发明的,他们不知道其他人已经发明了轮子。C++中的XML数据绑定也是如此。我也发明了它,我已经在各种项目上完善了10多年。我有一个解决方案来解决这里提到的问题和一些反复出现的其他问题:

    1. XML更新。这是将XML子集重新应用到现有对象模型中的能力。在许多情况下,XML绑定到索引对象,我们无法为每个更新重新索引。

    2. COM和CORBA接口管理。在相同的方面,XML数据绑定可以通过面向对象的实践实现自动化——接口对象的实例也可以向应用程序层提供这些数据。

    3. 状态跟踪。应用程序通常需要区分空值和缺少的值-两者都创建一个空字符串。这提供了验证和数据绑定。

    源代码使用的是限制最少的许可证,因此GPL。从这里支持和管理项目:

    http://www.codeproject.com/KB/XML/XMLFoundation.aspx

    现在已经是2010年了,我相信没有其他人会尝试重新发明轮子,因为有几个可以选择。IMHO-这个轮子是最抛光和最全面的实现。

    享受。

        3
  •  2
  •   Daniel Rikowski    17 年前

    一个好的解决办法是 libxml . 它为XML处理提供了轻量级的SAX解析和数据结构。有几个基于libxml构建的DOM库。

    不幸的是,它是一个C库,但是C++包装器是可用的。

    几年前,由于您提到的性能问题,我从MSXML切换到了libXML。

    如果您决定使用libxml,还应该看看 libxslt .

        4
  •  2
  •   graham.reeds    17 年前

    我们使用 Xerces-C++ . 它很容易设置,性能也足够好,所以我们不需要考虑更改。但是,我们并不需要大量的XML。

    我确实听过 podcast by Scott Hanselman (从 Hansel Minutes )讨论MSXML和XSLT的XML性能。

        5
  •  1
  •   tomgee    17 年前

    怎么样 RapidXML ,我在MFC应用程序中使用它,并进行了一些修改,以支持带有std::string的utf-16。到目前为止我很满意。

        6
  •  1
  •   Dr. Alex RE    14 年前

    GSOAP工具包自动将原生C和C++数据序列化到XML中,并通过XML数据绑定支持完整的XML模式规范:

    gSOAP SourceForge Project

    自1999年以来,它已经发展成为具有代码生成工具和库的重要代码库。它支持许多数据绑定和定制特性,这对于将XML模式类型映射到C和C++类型尤为重要。它可以序列化任何C/C++类型,也可以序列化STL容器、容器模板和循环数据结构。它已在W3C模式中用于数据绑定工作组(自几年以来,100%模式覆盖成功)。有一个活跃的开源用户库,GSOAP开发功能已经在许多工业项目和财富100强公司中用于开发SOAP/XML基础架构。

        7
  •  1
  •   Pierre    8 年前

    这在游戏后期,我只想说我们也使用libxml。它坚固可靠,而且工作得很好。稍微低一点,您将希望在其功能之上构建一些包装器。

    例如,您将得到一个不同的函数返回序列,这取决于您是否拥有:

    <tag attribute="value"/>
    

    或者:

    <tag attribute="value"> </tag>
    

    有时候你可能想要,有时候你不在乎。

        8
  •  0
  •   Rob    17 年前

    我们使用TinyXML为我们所有的XML需求,无论是MFC还是直C++。

    http://sourceforge.net/projects/tinyxml

    推荐文章