最小化XML文件的大小

时间:2012-06-14 11:49:01

标签: c# .net xml minimize

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

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

为:

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

这样可以节省大量的臃肿。

修改
此数据是从Entity Framework对象序列化的。选择XML作为协议的原因是.NET中的内在支持以及FromXml和ToXml的智能代码生成,以便实体绕过循环引用。

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

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

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

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

这不是严格正确的,但会实现你的目标。

答案 2 :(得分:1)

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

显然你可以通过gzip流传递这个,这将为你带来巨大的优势,但是如果你想要比它更多地挤出它,那么可能值得看看JSON甚至是二进制格式。

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

答案 3 :(得分:0)

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

相比,这会减少尺寸

答案 4 :(得分:0)

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

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