在C ++中处理xml的好方法

时间:2011-03-29 07:24:46

标签: c++ xml message

我在使用C ++编写的多线程消息处理应用程序上工作。应用程序接收xml消息,执行某些操作,并在需要时将xml消息发布到另一个服务。

目前,该应用程序通过在解析消息时提取数据并在解析过程中对该消息执行某些操作来工作。这对我来说似乎很糟糕。我有机会创建一个替代方案,我正在考虑我可以使用的方法。

我想到的一种方法是将xml数据序列化为数据对象,一旦完成,就根据需要提取和处理数据。缺点是我必须为我处理的每个不同的xml消息构建一个新类(可能大约30个),但这种方法看起来比我现在的更清晰。

有比这更好的方法吗?还应该提到一个警告,即在美国以外开发的任何代码库都不太可能被批准。

3 个答案:

答案 0 :(得分:1)

  

目前,该应用有效

那你到底在修什么?

不要修复那些没有破坏的东西。

答案 1 :(得分:1)

通常有两种XML解析方法:DOM和SAX。 DOM构建了一个文档对象模型(就像你提出的那样),而SAX在解析过程中访问文档的一部分时会调用回调。免费的,着名的libxml2库支持两种解析方法。

通常,SAX方法(即使用在访问文档时执行的回调)使用较少的内存并可能导致较低的最终用户延迟,因为您可以立即开始处理,而不必等待整个文档已被解析和构建。

您的程序是多线程的事实是一个红色的鲱鱼。只要您始终将对象传递给每个回调,并且该对象不在线程之间共享,您就可以在多个不同的线程中使用多个不同的此类对象安全地执行此操作。从重用的角度来看,使用libxml2等标准库进行解析也是明智的。

答案 2 :(得分:1)

可能有一些设计决策导致了这种方法(例如,使用类似SAX的模型处理比使用类似DOM的模型更快),后者需要解析整个消息,前者你可以在回调数据时作出决定。

在进行任何更改之前,我会先尝试先了解这些内容,其次除了让您忙碌之外,还有真正的业务需求吗?如果没有,继续前进并做其他事情......