有时感觉就像 XML 被使用只是因为它很时髦。
20 回答
一些优势:
- 您可以针对 XSD 验证 XML 数据
- 您可以轻松地向应该创建/使用 XML 数据的其他方提供合同(如 XSD),而无需逐字描述它们
- 您可以在 XML 数据表示的多层次中拥有一对多的关系
- XML 可以说比 CSV 更具可读性
- .net 框架原生支持 XML
从我的头顶上举几个例子。
当您的数据是严格的表格并且您知道它的结构时,.csv 文件是很好的。一旦您开始在不同级别的数据之间建立关系,xml 往往会更好地工作,因为关系可以通过嵌套变得明显(即使没有模式)。
XML 因其许多其他人已经提到的许多好处而成为默认设置。所以问题真的变成了“CSV 何时以及为什么比 XML 更可取?”。
在以下情况下,我觉得 CSV 比 XML 更可取: - 您正在加载简单的表格数据 - 您可以控制数据文件的生成和使用 - 数据集很大
如果前 2 点为真,则 CSV 完全可用,并且数据集越大,其性能优势就越显着。
我做了一个快速测试,加载约 8000 条记录,每条记录有 6 个文本字段。加载和解析 XML 大约需要 8 秒。加载 CSV 的时间不到 1 秒。
在很多情况下,XML 的开销是值得的,但是当星星对齐时,CSV 更有意义。
当您只有一系列与某些信息相关的值并且您知道您将始终存储每个字段的值时,CSV 很有用。
XML 具有具有自描述数据(标签)和层次结构的优点——这为您存储数据的方式提供了更多的灵活性。
我在网上找到了一个有趣的性能测试。当不需要 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%。”
您可以拥有更复杂的层次结构等,以及使用 XML 与 CSV 的结构。它提供了更多的灵活性。
当数据是非结构化的(未知模式)并且将由人类读取时,XML 优于 CSV。
可以说,除非数据主要包含文本,否则 CSV 也适用于人类消费。
同样相关的是,您的数据是 2 维还是 3 维。CSV 最适合 2 维文本,并且由于其冗长,XML 可以很好地处理 3 维数据。
XML 的整个“标准”是夸张的,不应该从字面上理解。XML 确实存在巨大的技术问题,并且许多解决方案并不是特别优雅,或者在许多情况下很有用:
- 它使用文本来指定自己的文本编码(鸡和蛋?)
- 没有一种更常见的 XML 模式语言工作得特别好。
- 使用创建标记语言的古老而普通的方法
<tags>
作为标准并不是特别有用。 - XML 试图追溯性地将更强大的标记语言(例如基于 SGML 的标记语言)塞入其自身,从而造成一堆不兼容的遗留问题。
- 除了最简单的情况(即友好数据)之外,XML 文本转义序列是否适用于任何情况仍有待确定。
需要明确的是,对于目前使用的 90% 的数据交换,XML 可能是不正确的选择,因为这些使用破坏了上述部分或全部假设。
我发现 XML 的最大优势在于解析功能和大多数 XML 库开箱即用的严格验证。由于 CSV 文件中的错误,与寻找损坏的值或未知行为相比,坚持格式正确和易于理解的错误消息(xyz 未在 x 行,y 列中关闭)是真正的帮助。
当然,它有时很时尚,也很时髦。这完全取决于您的应用程序。我更喜欢 XML 中的配置文件,因为它们易于解析。然而,我将 CSV 文件用于 DataGridView 或数据库转储。
这个每日 WTF:XML vs CSV The Choice is Obvious将帮助您做出决定;)
除了其他答案之外,XML 还允许您指定文档所在的字符集。
我没有足够的声誉来评论相关答案,但有人建议压缩 XML 作为获得与 csv 格式大小相同的一种方式。虽然这是真的,但 XML 压缩有时会卷土重来。如果您正在点对点传输 XML 数据并且失败了,那么能够读取 XML 并找出问题所在非常好。如果 XML 被压缩并且传输失败,则有时无法解压缩并检查内容。换句话说,压缩 XML 抵消了它所具有的人类可读性优势。
如果您想移动内容,CSV 会更轻量级,因为它通常比 XML 小 2 倍
XML 是标准的,不会受到不同操作系统版本的 CSV 的影响
我会说使用 XML(和/或 JSON),因为有一天您或某人(脾气暴躁且收藏大量枪支)可能不得不在 CSV 数据中查找错误。
所以是的,我说的是可读性,别忘了想想其他人!他可能在想你。
XML 提供了一种使用元数据(由标记名称和属性名称提供)标记数据的方法,而 CSV 没有。将此与定义结构化层次结构的能力相结合,当仅提供数据时,它使 XML 更易于理解,而 CSV 则需要随附的工具或文档来描述如何解释每个值。
我还发现一些 cvs 生成器/解析器在处理一般文本数据时遇到了很多困难。带有大量回车、逗号和引号等的长文本字符串,在操作 cvs 时会变得非常困难。
SSMS 喜欢截断 csv 以获得乐趣。
结构化、人类可读、更容易编辑、验证、可解析性、可转换性、类型、命名空间、强大的库,都是众多原因之一。
最重要的是,虽然它是标准的。
又是 XML 的一个:XML 中的X代表E可扩展(我知道,不是真正的助记符 :-P)。这意味着,在 XML 命名空间机制的帮助下,您可以加入任何两种您喜欢的 XML 语言,并将它们组合到同一个文档中。鉴于只有一种 CSV“语言”(不包括无数的分隔符样式),XML 可以处理相当多的复杂性,而且是以模块化的方式。
然而,这正是 CSV 的优势:如果您真的有表格数据,那么 XML 语法通常是多余的。
- 在每种语言和数据库中都有现有的解析器和发射器
- 他们为我处理编码
- 他们为我处理逃跑
这对我来说很重要。
当然,在 CSV 中进行转义有一种半标准的方式(即“Excel 的方式”),而且自己编写并不难,但确实需要一些时间。然后你必须隐含地同意带外字符编码。但是,由于它非常简单,人们尝试自己编写它,并且总是搞砸#2 或#3。
JSON 也满足 #2 和 #3 并接近满足 #1。它也可以说更简单,至少对于非文档文件。毫不奇怪,我发现自己越来越多地在内部和外部使用它。
我也更喜欢它,因为它更具可读性。