XML 何时以及为何优于 CSV? [关闭]

Posted

技术标签:

【中文标题】XML 何时以及为何优于 CSV? [关闭]【英文标题】:When and Why is XML preferable to CSV? [closed] 【发布时间】:2010-12-21 15:57:46 【问题描述】:

有时感觉就像使用 XML 只是因为它很流行。

【问题讨论】:

【参考方案1】:

当数据是非结构化的(未知模式)并且将由人类读取时,XML 优于 CSV。

可以说,除非数据主要包含文本,否则 CSV 也适用于人类消费。

同样相关的是您的数据是 2 维还是 3 维。 CSV 最适合 2 维文本,由于其冗长,XML 可以很好地处理 3 维数据。

XML 的整个“标准”都是夸张的,不应该从字面上理解。 XML 确实存在巨大的技术问题,而且许多解决方案并不是特别优雅,或者在许多情况下很有用:

    它使用文本来指定自己的文本编码(鸡和蛋?) 更常见的 XML 模式语言都不能很好地工作。 使用<tags> 创建标记语言的古老而普通的方法作为标准并不是特别有用。 XML 试图追溯性地将更强大的标记语言(例如基于 SGML 的标记语言)植入其自身,从而造成一堆不兼容的遗留问题。 除了最简单的情况(即友好数据)之外,XML 文本转义序列是否适用于任何情况仍有待确定。

需要明确的是,对于目前使用的 90% 的数据交换,XML 可能是不正确的选择,因为这些使用破坏了上述部分或全部假设。

【讨论】:

【参考方案2】:

我在网上发现了一个有趣的性能测试。当不需要 XML 的特性时,XML 的缺点的神例。

“我从不同的角度尝试了 Steven 的实验。我填写了 Excel XP 具有一位数字的电子表格,将其保存在 XML 和 逗号分隔的文本文件 (CSV)。然后我用 WinZip 压缩,然后 都用 Excel 打开。这是我发现的:

XML 文件为 840MB,CSV 文件为 34MB——相差 2,500% 压缩后,XML 文件为 2.5MB,CSV 文件为 0.00015MB (150KB) -- 1,670% 区别。

同样引人注目的是解压缩文件并将其渲染为 Excel 电子表格:使用 XML 文件大约需要 20 分钟; CSV 花了 1 分钟——相差 2,000%。”

http://www.xml.com/pub/a/2004/12/15/deviant.html

【讨论】:

这是一个限制情况,因为您有大量带有“”分隔符的小数据来衡量文件。【参考方案3】:

XML 因其许多其他人已经提到的许多好处而成为默认设置。所以问题真的变成了“CSV 何时以及为什么比 XML 更可取?”。

在以下情况下,我觉得 CSV 比 XML 更可取: - 您正在加载简单的表格数据 - 您可以控制数据文件的生成和使用 - 数据集很大

如果前 2 点为真,则 CSV 完全可用,并且数据集越大,其性能优势就越显着。

我做了一个快速测试,加载了大约 8000 条记录,每条记录有 6 个文本字段。加载和解析 XML 大约需要 8 秒。加载 CSV 的时间不到 1 秒。

在很多情况下,XML 的开销是值得的,但是当星星对齐时,CSV 更有意义。

【讨论】:

【参考方案4】:
    在每种语言和数据库中都有现有的解析器和发射器 他们为我处理编码 他们为我处理逃跑

这对我来说很重要。

当然,在 CSV 中进行转义有一种半标准的方式(即“Excel 的方式”),自己编写并不难,但确实需要一些时间。然后你必须隐含地同意带外字符编码。但是,由于它非常简单,人们尝试自己编写它,并且总是搞砸 #2 或 #3。

JSON 也满足 #2 和 #3 并接近满足 #1。它也可以说更简单,至少对于非文档文件。毫不奇怪,我发现自己越来越多地在内部和外部使用它。

【讨论】:

【参考方案5】:

结构化、人类可读、更易于编辑、验证、可解析性、可转换性、类型、命名空间、强大的库,都是众多原因。

尽管它是标准的,但最重要的是。

【讨论】:

HTML 是 SGML。 XML 是 SGML。 HTML 不是 XML。 XHTML 是 XML。 好点。 XML 的强相似之处是 SGML,但是 HTML 不是 XML。这些天来,XHTML 是我的首选。我喜欢我的 HTML 像 XML 一样结构化。仍然比用 CSV 编码网站更可取;)【参考方案6】:

我会说使用 XML(和/或 JSON),因为有一天您或某人(脾气暴躁,拥有大量枪支)可能不得不在 CSV 数据中查找错误。

所以是的,我说的是可读性,别忘了想想其他人!他可能在想你。

【讨论】:

+1 大声笑是的,非常正确 - 始终编写代码,就好像最终维护您的代码的人将是一个知道您住在哪里的暴力精神病患者。 〜马丁戈尔丁【参考方案7】:

一些优势:

您可以根据 XSD 验证 XML 数据 您可以轻松地向应创建/使用 XML 数据的其他方提供 合同(作为 XSD),而无需逐字描述它们 您可以在 XML 数据表示的多层次中建立一对多关系 XML 可以说比 CSV 更具可读性 .net 框架原生支持 XML

从我的脑海中举几个例子。

【讨论】:

这个列表已经相当不错了。在我看来,您还应该补充一点,到处都有可用的标准解析器,而且 XML 压缩得非常好,所以更大的大小并不是真正的问题。 XML 比 CSV 更具可读性 - > 远非总是如此!名字、姓氏,例如 John、Doe Bart、Smith Will、Bate,而不是整个 stuf。由于字段很少,标签通常会降低可读性 +1 但 XML 并不总是更具可读性 @Peter & @surfrbum:我没有说 XML 比 CSV 可读性。如果您只有几列,那么 CSV 几乎肯定会更快地阅读。当有很多列时,CSV 是无法读取的,尤其是当里面有未定义的值时。但我还是编辑了我的答案。 :) 我觉得 XML 读起来很直观,尤其是当它们包含分层数据时。想象一下读取逗号分隔的 App.Config 文件!。【参考方案8】:

我还发现一些 cvs 生成器/解析器在处理一般文本数据时有很多困难。带有大量回车符、逗号和引号等的长文本字符串,在操作 cvs 时会变得非常困难。

SSMS 喜欢截断 csv 以取乐。

【讨论】:

正是问题所在。如果您正在考虑使用 csv,则应该更多地考虑冒号分隔,例如 key:value:key:value 或其他。这就是 *nix 一直这样做的方式,并且有充分的理由。【参考方案9】:

我发现 XML 的最大优势在于解析功能和大多数 XML 库开箱即用的严格验证。由于 CSV 文件中的错误,与寻找损坏的值或未知行为相比,坚持格式正确和易于理解的错误消息(xyz 未在 x 行,y 列中关闭)是真正的帮助。

【讨论】:

【参考方案10】:

我没有足够的声誉来评论相关答案,但有人建议压缩 XML 作为一种获得与 csv 格式大小相同的方法。虽然这是真的,但 XML 压缩有时会卷土重来。如果您正在点对点传输 XML 数据并且它失败了,那么能够读取 XML 并找出问题所在是很好的。如果 XML 被压缩并且传输失败,则有时无法解压缩并检查内容。换句话说,压缩 XML 抵消了它所具有的人类可读性优势。

【讨论】:

这就是为什么你用gzip压缩它(透明地使用zlib)你可以用zcat查看数据,就像你可以cat一个CSV文件一样,gzip -t会告诉你是否有任何损坏。如何知道您的 csv 文件是否已损坏?【参考方案11】:

即使您有复杂的数据,您也可以轻松遍历 XML 数据。

检查这些链接:

The Advantages of XML Over CSV XML vs CSV XML vs CSV : The Choice is Obviou

【讨论】:

【参考方案12】:

还有一个关于 XML 的:XML 中的 X 代表 Extensible(我知道,不是真正的助记符 :-P)。这意味着,在 XML 命名空间机制的帮助下,您可以加入任何两种您喜欢的 XML 语言,并将它们组合到 same 文档中。鉴于只有一种 CSV“语言”(不包括无数的分隔符样式),XML 可以以模块化的方式处理相当多的复杂性。

然而,这就是 CSV 的优势:如果您真的有表格数据,XML 语法通常是多余的。

【讨论】:

只有一种 CSV 'language' = 快速提问欧洲版 Excel 中 csv 文件的分隔符是什么?【参考方案13】:

XML 提供了一种使用元数据(由标记名称和属性名称提供)标记数据的方法,而 CSV 则没有。将此与定义结构化层次结构的能力相结合,当仅提供数据时,它使 XML 更易于理解,而 CSV 则需要随附的工具或文档来描述如何解释每个值。

【讨论】:

【参考方案14】:

除了其他答案之外,XML 还允许您指定文档所在的字符集。

【讨论】:

【参考方案15】:

当然,有时它很时尚,也很值得关注。这完全取决于您的应用程序。我更喜欢 XML 中的配置文件,因为它们易于解析。然而,我将 CSV 文件用于 DataGridView 或数据库转储。

Daily WTF : XML vs CSV The Choice is Obvious 将帮助您做出决定;)

【讨论】:

【参考方案16】:

.csv 文件适用于您的数据是严格的表格形式并且您知道其结构。一旦您开始在不同级别的数据之间建立关系,xml 往往会更好地工作,因为关系可以通过嵌套变得明显(即使没有模式)。

【讨论】:

这也是我在选择 xml 和 csv 时的经验。如果您的数据自然适合结构化表格格式,那么 csv 可能是最佳选择。如果没有,xml 可能是安全的选择。【参考方案17】:

如果你想移动东西,CSV 会更轻量级,因为它通常比 XML 小 2 倍

XML 是标准的,不会受到不同操作系统版本的 CSV 的影响

【讨论】:

如果您使用属性,您可以真正减少 XML 的大小。 你也可以很好地压缩XML,即使你不使用属性。我这里有一些测试数据,压缩的 XML 非常小(读取:一到三个字母标签和属性)元素被压缩到原始大小的 14% 左右。【参考方案18】:

当您只有一系列与某条信息相关的值并且您知道您将始终存储每个字段的值时,CSV 非常有用。

XML 具有自描述数据(标签)和层次结构的优势 - 这为您存储数据的方式提供了更大的灵活性。

【讨论】:

【参考方案19】:

您可以使用 XML 与 CSV 建立更复杂的层次结构等和结构。它提供了更多的灵活性。

【讨论】:

灵活性总是伴随着复杂性。您的电视功能越多,遥控器上的按钮就越多。【参考方案20】:

而且我也更喜欢它,因为它更具可读性。

【讨论】:

以上是关于XML 何时以及为何优于 CSV? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

何时使用类别以及何时使用子类化? [关闭]

使用 Java servlet 时何时打开以及何时关闭 mysql 连接?

何时使用向量中的对象以及何时使用指向向量中对象的指针? [关闭]

某些行的 XML 文件解析错误 [关闭]

将 CSV 转换为 XML 文件的 Java lib 或应用程序? [关闭]

有人可以解释一下如何以及何时应该在 oracle 中使用 syscursor 吗? [关闭]