5

我需要编写一个 linux c++ 应用程序,它以 XML 格式保存它的设置(以便于手动编辑),并且还通过套接字和 HTTP 上的 XML 消息与现有应用程序进行通信。问题是我无法找到任何智能库来帮助我,我并不特别想编写 DOM 或 SAX 代码来编写和阅读一些非常简单的消息。

Boost Serialization 几乎是一个匹配项,但它在它生成的 xml 中添加了许多特定于 boost 的数据。这显然不适用于交换格式。我想知道是否可以使 Boost Serialization 或其他一些 c++ 序列化库生成干净的 xml。我不介意是否有一些必需的额外属性——比如版本属性,但我真的希望能够控制它们的命名并摆脱我不使用的“功能”——tracking_level 和 class_id实例。

理想情况下,我只想在 Java 中拥有类似于 xstream 的东西。我知道 c++ 缺乏自省,因此有必要进行一些手动编码 - 但如果有一个干净的解决方案来读取和写入简单的 XML 而不会产生混乱,那就太好了!

如果无法做到这一点,我也对 XML 模式是规范资源(合同优先)的工具感兴趣——这是 C++ 的一个很好的 JAXB 替代品。到目前为止,我只找到了像 CodeSynthesis XSD 这样的商业解决方案。我更喜欢开源解决方案。我已经尝试过 gSoap - 但它会生成非常丑陋的代码,而且它也是特定于 SOAP 的。

无奈之下,我也开始寻找 protobuffers 的替代序列化格式。这存在 - 但仅适用于 Java!令我惊讶的是,协议缓冲区似乎是比 XML 更受支持的数据交换格式。

我只是为这个应用程序寻找库而发疯,我真的需要一些新的想法。任何人?

4

3 回答 3

0

引用问题: “到目前为止,我只找到了像 CodeSynthesis XSD 这样的商业解决方案。我更喜欢开源解决方案”

CodeSynthesis XSD可供开源项目使用。该产品具有商业专有许可证,但除此之外它还具有开源许可证(GPL 版本 2,但提供了额外的自由)。您可以将它与http://www.gnu.org/licenses/license-list.html中列出的所有“GPL 兼容的自由软件许可证”和所有“GPL 不兼容的自由软件许可证”一起使用

CodeSynthesis XSD 的第三个许可选项是用于 Small Vocabularies 的免费专有许可。如果您使用的是小型 XML 模式,您可以免费使用该许可证。

在此处阅读有关不同 CodeSynthesis XSD 许可证的更多信息:http: //www.codesynthesis.com/products/xsd/license.xhtml

在功能方面,CodeSynthesis XSD 还支持对生成的二进制格式进行序列化和解析。您可以使用该格式进行有效的沟通。

于 2012-06-29T18:30:26.063 回答
0

为了进一步扩展 Troubadour 的答案,我使用Qt 的 XML 库取得了巨大成功,做的事情与您非常接近。在我自己的情况下,我将配置数据序列化到本地文件,然后偶尔将其流式传输到其他线程。

QXmlStreamWriterQXmlStreamReader是有问题的两个类。 是使用它们的示例。

对于我自己的 XML 序列化,我可以完全控制生成的实际格式,只需要几百行代码就可以实现。关于使用 Qt 的 XML,我能说的最好的事情是我可以专注于内容,让库完成标记数据的痛苦工作——这是理想的。

最后,这里有一些关于 Qt 许可证(商业、GPL、LGPL)的信息。

于 2010-05-21T15:31:27.643 回答
0

我不确定它提供了什么,因此如果它是您正在寻找的,但 Qt 有一个 xml 模块。它还有一个网络模块,听起来好像对你有用。

于 2010-05-21T10:26:13.777 回答