XML与逗号分隔的文本文件

时间:2009-07-17 00:13:23

标签: xml text csv

好的,我已经阅读了几本关于XML的书籍并编写了程序来吐出来,什么不是。但这是问题所在。逗号分隔文件和XML文件都是“人类可读的”。但一般来说,逗号分隔文件在我看来比XML文件容易得多;标签通常占用尽可能多的空间而不是数据。这似乎模糊了我正在阅读的内容,格式可以使页面包含相同的信息,您可以在逗号分隔文件中的单行文本中包含这些信息。并且以逗号分隔的文件解析起来要复杂得多。那么真正的问题是为什么要使用XML?只是因为所有很酷的孩子都在这样做?

12 个答案:

答案 0 :(得分:16)

<强>优点

XML优于CSV的许多优点:

  • 分层数据组织
  • 自动数据验证(XML架构或DTD)
  • 轻松转换格式(使用XSL)
  • 易于识别关系结构
  • 可与XML-RPC结合使用
  • 适合对象持久性(编组)
  • 简化企业对企业的沟通
  • 有用的相关技术(XPath,DOM)
  • 与现代Web浏览器紧密集成
  • 提取,转换和加载(ETL)工具
  • 向后文件格式兼容性(版本属性)
  • 数字签名

这完全取决于问题域以及您要解决的问题。

示例

最后一项是许多人在编写网页时遗漏的内容。考虑一下你有一个大型歌曲数据存储的情况。歌曲有艺术家,专辑,每分钟节拍等等。您可以将数据导出到XML,编写一个简单的样式表以将XML呈现为XHTML,然后将浏览器指向XML页面。浏览器将XML呈现为网页。

使用CSV无法做到这一点。

<强>缺点

Joel Spolsky a great article解释了为什么XML作为一个复杂的数据存储是一个糟糕的选择:它很慢。 (与可以使用单个CPU指令检索上一个或下一个记录的数据库不同,遍历XML文档中的记录要慢得多。)可以说,这可以被视为优化问题,由waiting 18 months解决。因此:

  • 解析比其他格式更慢
  • 语法冗余会降低可读性
  • 文件膨胀可能会影响存储成本
  • 无法轻松建模重叠(非分层)数据结构
  • 设计不良的XML文件格式并不罕见(根据我的经验;需要引用)

相关问题

另请参阅:Why Should I Use A Human Readable File Format

答案 1 :(得分:11)

这些不是唯一的两个选项,您也可以使用比{xml重量轻得多的JSONYAML

一般来说,如果你有简单的表格数据,但有很多特殊字符,那么CSV就不是一个糟糕的选择。对于结构化数据,请考虑使用其他3中的一种。

答案 2 :(得分:6)

XML支持复杂,结构化和层次化的事物表示。这与CSV可以轻松存储的内容相差无几。

考虑面向对象环境中的复杂对象图。它可以非常容易地序列化为XML文档,但CSV无法处理这样的事情。

答案 3 :(得分:4)

这一切都取决于你需要做什么。如果您的数据结构需要比简单的“扁平”行结构更复杂。例如,分层数据,那么XML是一个很好的选择。

答案 4 :(得分:4)

良好的XML是人类可读和人类可编辑的。您可以查看XML文件并确切知道它是什么。 CSV文件是人类可读的,但您根本不知道每个值的含义。

例如,如果我们存储用户帐户,您更喜欢哪个?

<user>
    <username>ryeguy</username>
    <password>abc123</password>
    <regdate>3-4-08</regdate>
    <email>my@email.com</email>
</user>

OR

ryeguy,abc123,3-4-08,my@email.com

当然,这只是一个例子,但想象它有30个字段左右!

或者更糟糕的是,如果我们制作子字段怎么办?

<user>
    <username>ryeguy</username>
    <password>abc123</password>
    <regdate>3-4-08</regdate>
    <email>my@email.com</email>
    <posts>
        <post>
            <id>34</id>
            ....
        </post>
    </posts>
</user>

如果放入CSV,那将是一件痛苦的事。很快你就会制作自己的查询语言。

答案 5 :(得分:3)

XML是人类可读的这一事实并不意味着它是由人类直接阅读(甚至编辑)的想法而作出的。

XML具有一组很好的属性,使其成为许多情况下的理想选择,特别是当您拥有人力资源来处理这些属性不可避免地带来的额外负担时:验证,定义良好的标准,很多工具,一个非常灵活的架构,它很好地映射到树模型,这是许多程序使用的。它的人类可读性是一个附加价值,它简化了调试(尝试调试二进制文件......),检查和微小案例的小改动。

另一方面,CSV很容易,快速和线性,尽管存在许多方言,并且解析得很好从琐碎(并且增加的问题是看起来琐碎!)。对于涉及数据表的大多数应用程序,CSV是最佳选择。

但是,一般情况下,您可以使用XML解决数据表示但无法使用CSV解决(例如,树)。另一方面,任何可以用CSV表示的数据也可以用XML表示,尽管它不能保证(实际上也经过验证)它将更有效(在空间方面,易于解析等)。这是你的格式的“自由度”问题。 XML具有更高的自由度值。 CSV较低。 XML背后的炒作也与此相关。

不要成为锤子综合症的受害者:当你有一把锤子(XML)时,一切看起来像钉子(你需要用XML解决的东西)。现实是非常不同和微妙的。 XML很酷,但它不是任何问题的答案。

答案 6 :(得分:2)

CSV从来就不是真正的标准。同样快速而肮脏的方法,一群人独立提出。当然,其中一些人比其他人更聪明,并意识到你需要逃避角色,但其他人却没有。甚至MSSQL也不正确地导出CSV。有一种记录正确的XML方式,所以如果你做得对,某人的应用程序或任何不接受它的东西,当你说“那不是我的错。”时,你会有一些影响力。

答案 7 :(得分:2)

XML将描述内容,并且还有各种语言的大量支持库......但它可能会膨胀。如果csv的接收端知道布局并且是表格式的,我认为它没有任何问题。

答案 8 :(得分:1)

可以根据合同(架构或DTD)验证Xml。

答案 9 :(得分:1)

XML还有免费的技术:XmlDom,XPath,XSLT,XSD,Xml架构

答案 10 :(得分:1)

您可能更喜欢XML而不是CSV的原因(当然取决于手头的任务): *几乎所有平台和语言都有现有的库,用于读取,编写,解析和操作XML。 * XML具有明确定义的编码所有字符的规则。 CSV具有歧义,例如如何编码作为数据一部分的逗号。 * XML支持各种数据形状(如分层),当数据看起来像表(行和列)时,CSV最有用。

答案 11 :(得分:1)

我喜欢在这种情况下考虑主要的区别,因为XML是基于TREE的,而CSV是基于TABLE的。

也就是说,您可以嵌套并重新嵌套和省略,并且通常在XML中创建复杂的TREE结构,而您只能以CSV格式制作简单的2D表。