XML替换

时间:2010-11-16 10:22:35

标签: c++ xml data-structures

我有一个服务器应用程序,我在C ++中重写,这曾经使用XML将数据发送到客户端/从客户端。我发现即使使用现有的库,实现XML也是一件非常痛苦的事情。它似乎只是反直觉而且我使用的C ++库看起来过于复杂。

我想知道是否有人知道更好的方法将数据从客户端发送到服务器并以更简单,更直观的方式返回然后解析XML。数据主要包括基本类型。

我想也许只是使用一个包含所需数据类型的结构,然后通过原始套接字发送它。

我浪费了很多时间,这是不真实的。

5 个答案:

答案 0 :(得分:7)

正如 duffymo 所说,JSON完全适合你想要做的事情。为了增加他的答案,它在许多语言中具有健康的表示(我知道XML也是如此,但这里的重点是OP发现XML对于简单数据类型来说是一种痛苦)。

您可以在http://www.json.org/找到有关JSON的更多信息。在本页的底部是指向各种语言(包括C ++,例如:http://sourceforge.net/projects/jsoncpp/)的实现的链接。

简而言之,JSON代表JavaScript Object Notation,是一种描述对象的简单方法。地址可以通过以下方式呈现:

{
    "address1" : "5, The Green",
    "address2" : "Some Street",
    "town"     : "JsonVille"
}

支持数组:

{
    "address1" : "5, The Green",
    "address2" : "Some Street",
    "town"     : "JsonVille"
    "occupants": ["olivia", "newton", "john"]
}

更复杂的对象:

{
    "address1" : "5, The Green",
    "address2" : "Some Street",
    "town"     : "JsonVille"
    "occupants": [{"name" : "Olivia",
                   "age"  : 24
                 },{"name" : "Newton",
                    "age"  : 32
                 },{"name" : "John",
                    "age"  : 42}
                 ]
}

编辑:语法错误:)

答案 1 :(得分:3)

我会尝试使用JSON或Google的协议缓冲区来查看它们是否适合您。

答案 2 :(得分:2)

我会将DBus视为协议,因为它非常标准。

答案 3 :(得分:0)

根据您的需要,有一些替代方案。

显然,面向性能的网络数据传递的更好选择可能是Google Protobuf。然而,它显然不像我给你的任何其他替代方案那么容易使用,因为它显然是高效的,而不是人类可读的等等。

对于人类可读的数据,有:

  • JSON
  • YAML(alsmot所有语言至少有一个解析器实现)
  • 由boost :: property_tree
  • 提供的INFO格式

答案 4 :(得分:0)

如果您所做的只是通过网络发送数据 - 您实际上并不需要可编辑的文本表示,例如XML或JSON - 那么请看一下boost :: serialization。