0

我有一个以 XML 格式交换数据的客户端/服务器应用程序。数据大小约为 50MB,其中大部分由 XML 标记本身组成。有没有办法获取生成的 XML 并索引节点名称,如下所示:

<User><Assessments><Assessment ID="1" Name="some name" /></Assessments></User>

到:

<A><B><C ID="1" Name="some name" /></B></A>

这将节省大量的膨胀。

编辑
此数据是从实体框架对象序列化的。选择 XML 作为协议的原因是 .NET 的内在支持以及 FromXml 和 ToXml 的智能代码生成,以便实体规避循环引用。

4

5 回答 5

4

仅在客户端和服务器之间压缩/解压缩数据流怎么样?与对 xml 数据进行一些自定义转换相比,这将更容易实现并且更不容易出错。

于 2012-06-14T11:53:36.410 回答
1

您可以考虑对数据使用属性而不是元素。例如,如果您将“性别”作为属性,您将获得:

<person gender="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

而如果它是一个元素,你会得到:

<person>
  <gender>female</gender>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

这不是严格正确的,但会实现你所追求的。

于 2012-06-14T11:54:56.193 回答
1

XML 的重点是您不需要压缩/最小化数据。如果您需要最大程度地减少线路上的内容,那么您很有可能使用了错误的协议。

显然,您可以通过 gzip 流传递它,这将为您带来巨大的优势,但如果您想从中榨取更多,那么可能值得研究 JSON 甚至二进制格式。

XML 被设计为可供人类阅读,并且通过消除可读性,您基本上消除了首先使用 XML 的主要原因之一。

于 2012-06-14T11:58:06.223 回答
0

或者,您也可以考虑json代替xml,与xml

于 2012-06-14T12:06:51.540 回答
0

我最终编写了一个小类,它重命名节点名称并创建一个映射元素,因此该过程也可以反转。仅此一项就使文件大小从 50MB 减少到 10MB。

下一步是压缩文件,但我想知道使用二进制序列化可以节省多少空间。以前没有尝试过。

于 2012-06-17T07:26:48.000 回答