【问题标题】:.NET Implementation of Efficient XML.NET 高效 XML 的实现
【发布时间】:2012-02-24 17:03:59
【问题描述】:

我正在将大型数据库导出为 xml 格式。需要将此 XML 数据压缩为尽可能小的格式。我听说过很多关于 Efficient XML (EXI) 并且想知道是否有一个 .NET 实现,以便可以从代码中调用它...

有没有人有这方面的例子,因为在线资源似乎有点稀疏......

【问题讨论】:

  • 您似乎同时控制了压缩 XML 的代码和稍后解压缩它的代码。如果将其存储为某种非 XML 格式“压缩”它,然后通过转换为 XML 将其“解压缩”,不是更好吗?
  • 我会选择 JSON 之类的东西来节省这些字节。我怀疑对信息进行编码会有多大帮助?
  • @PatrickMagee JSON 将只保存在标签引号和结束标签中,除了不是 XML 标准的一部分。这远非任何二进制格式,我的回答有更多信息。

标签: c# xml visual-studio compression exi


【解决方案1】:

事实证明,微软创建了自己的二进制 XML 格式/编码,称为 MC-NBFX(很吸引人)。从 .NET 3.0 开始,这是 .NET 框架和 WCF 的一部分。欲了解更多信息,请参阅:

另一种选择是通过IKVM 运行Java 实现以生成.Net 程序集。我能找到的开源 Java 实现是:

【讨论】:

  • 我会为内容丰富的答案+1。但它喜欢说,坚持 MC-NBFX 是唯一可用的 XML 二进制文件。你知道,但答案有点不清楚。
  • 那个博客条目“WSF Binary XML and dictionaries”有一些我不知道的非常有用的信息。感谢分享!
【解决方案2】:

这样的实现确实存在。该公司创建了高效 XML 交换格式 (AgileDelta) offers an Efficient XML library 的前身,其中包括 .Net 版本。虽然他们似乎没有公布价格。

The official EXI site 没有列出任何其他 .Net 实现。

【讨论】:

  • Nagasena 拥有 EXI 规范的 .Net(用 C# 编写)和 Java 实现。
【解决方案3】:

Nagasena 具有 EXI 规范的 .Net(用 C# 编写)和 Java 实现。

【讨论】:

  • 但它太神秘了!并且缺少 C# doc/tuto。我已经能够(几乎是盲目地)找到将 XML 编码为 EXI 的方法,但是在程序集无缘无故地向我抛出未处理的空引用异常后,我放弃了获取 XML。
  • 听起来不太好。好吧,不管怎样,这里是direct link 到实际的开源项目。
【解决方案4】:

你想要尽可能小的格式有什么原因吗? XML 并不是真正为压缩优化而设计的。如果您想要的是易于访问的档案,@Svick 的回答是目前的事实。

您可以在这里找到很多您要问的内容: Best compression algorithm for XML?

如果您想要的是定期访问的存档数据,那么 EXI 非常棒。否则,如果您的目标是长期存档,只需使用 zip 实用程序。亲吻。

【讨论】:

  • 它说它想要效率。想想文本 XML。它需要将一个整数转换为 ASCII 十进制表示,这会消耗资源,在此之前您将再次对整个文件运行 zip 压缩器,从而降低效率。二进制 XML 可以很高效,并且有一些实现。有更有效的格式,但它要求 XML,所以这就是方式。
  • 我对二进制格式的主要问题是从长远来看它们可能不受支持。似乎他想存档数据,但仍保持可访问性。他应该如何归档它取决于他希望访问它的频率。我不反对二进制 XML 提供了一些效率优势(它在其他 cmets 中得到了很好的介绍)。我更关心他为什么要做他正在做的事情。我相信压缩数据库导出为 XML 提供了一种长期的存储解决方案,在十年左右的时间里不容易发生标准的变化,这可能是值得增加的低效率的。
  • 二进制 XML 在处理能力和大小方面的效率都不是基于意见的事实。使用 source,就大小而言,它可以将大小减小 80% (en.wikipedia.org/wiki/Fast_Infoset)。无论如何,我知道你的意思是它想要长期交换,但是有一些标准定义了一些二进制 XML,使用一种或其他的想法,他们将得到承诺,然后是基于某一点的意见。
【解决方案5】:

如果您需要遵循 XML 标准,二进制 XML 是一种可行的方法(并且有一些实现)。

JSON,即使不是 XML,也会随着数字而丢失。 Ex 32 位无符号整数最大值将在 JSON 中由 10 个字节表示。在几乎所有二进制格式中,这将是 4 个字节。这将适用于日期/时间等。

任何具有标准元素/属性类型的像样的二进制 XML 都应该提供更好的大小和处理效率。如果它可以重用标签,比如压缩文件中的字典,就像你从表中导出一样,那也是一个不错的功能。

【讨论】:

    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2018-12-25
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多