Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++; 我研究的是一个用C++编写的多线程消息处理应用程序。应用程序接收xml消息,执行一些操作,并在需要时将xml消息发布到另一个服务 目前,应用程序在解析消息时对数据进行分析,并在解析过程中对该消息执行一些操作。对我来说,这似乎是一个糟糕的做法。我有机会创建一个替代方案,我正在考虑我可以使用的方法_C++_Xml_Message - Fatal编程技术网

在C++; 我研究的是一个用C++编写的多线程消息处理应用程序。应用程序接收xml消息,执行一些操作,并在需要时将xml消息发布到另一个服务 目前,应用程序在解析消息时对数据进行分析,并在解析过程中对该消息执行一些操作。对我来说,这似乎是一个糟糕的做法。我有机会创建一个替代方案,我正在考虑我可以使用的方法

在C++; 我研究的是一个用C++编写的多线程消息处理应用程序。应用程序接收xml消息,执行一些操作,并在需要时将xml消息发布到另一个服务 目前,应用程序在解析消息时对数据进行分析,并在解析过程中对该消息执行一些操作。对我来说,这似乎是一个糟糕的做法。我有机会创建一个替代方案,我正在考虑我可以使用的方法,c++,xml,message,C++,Xml,Message,我想到的一种方法是将xml数据序列化为数据对象,完成后,根据需要提取和处理数据。缺点是,我必须为我处理的每个不同的xml消息构建一个新的类(大约30条),但这种方法似乎比我现在使用的更干净 还有比这更好的方法吗?还应该提到一个警告,即在美国以外开发的任何代码库都不太可能获得批准 目前,该应用程序可以正常工作 那你到底在修什么 没有坏的东西不要修 目前,该应用程序可以正常工作 那你到底在修什么 不要修复未损坏的内容。XML解析通常有两种方法:DOM和SAX。DOM建立了一个文档对象模型(如您所建议

我想到的一种方法是将xml数据序列化为数据对象,完成后,根据需要提取和处理数据。缺点是,我必须为我处理的每个不同的xml消息构建一个新的类(大约30条),但这种方法似乎比我现在使用的更干净

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

目前,该应用程序可以正常工作

那你到底在修什么

没有坏的东西不要修

目前,该应用程序可以正常工作

那你到底在修什么


不要修复未损坏的内容。

XML解析通常有两种方法:DOM和SAX。DOM建立了一个文档对象模型(如您所建议的),而SAX在解析过程中访问文档的一部分时调用回调。这个免费的、众所周知的库支持这两种解析方法

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


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

XML解析通常有两种方法:DOM和SAX。DOM建立了一个文档对象模型(如您所建议的),而SAX在解析过程中访问文档的一部分时调用回调。这个免费的、众所周知的库支持这两种解析方法

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


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

可能有一些设计决策导致了这种方法(例如,使用类似SAX的模型比使用类似DOM的模型处理要快),后者需要解析整条消息,使用前者,您可以在收到数据后做出决策


在做出任何改变之前,我会先尝试理解这些,其次,除了让你忙之外,还有真正的业务需要吗?如果没有,请继续做其他事情……

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


在做出任何改变之前,我会先尝试理解这些,其次,除了让你忙之外,还有真正的业务需要吗?如果没有,继续做其他事情……

“如果没有坏掉,它就没有足够的功能。”^^@Zeta,OP明确表示这是一个创建替代方案的机会-听起来像是一个政府it项目……)重构呢?这是改变软件的唯一原因吗?应用程序正在同时解析和执行操作。这会在两个不同的进程之间创建一个人工依赖关系,因此很难正确处理异常,并且会限制将来代码的重用。最后,正确的决定可能仍然是什么也不做,但在我看来,这是值得努力考虑的。@Alessandro,这是完全正确的。你提到的依赖性不适合我,我正在寻找重构的架构建议。“如果它没有被破坏,它就没有足够的功能。”^^^@Zeta,OP明确指出这是一个创建替代方案的机会——听起来像是一个政府it项目……)重构呢?这是改变软件的唯一原因吗?应用程序正在同时解析和执行操作。这会在两个不同的进程之间创建一个人工依赖关系,因此很难正确处理异常,并且会限制将来代码的重用。最后,正确的决定可能仍然是什么也不做,但在我看来,这是值得努力考虑的。@Alessandro,这是完全正确的。您提到的依赖性是我不喜欢的,我正在寻找重构的架构建议。(还有越来越流行的XML“拉”API,从2000年左右出现的kxml开始)回答得不错,但OP不能使用“非美国”代码,不幸的是,
libxml2
的作者是一位在中国的法国开发人员。(还有越来越受欢迎的XML“拉”API,从kxml开始