代码之家  ›  专栏  ›  技术社区  ›  NoMoreZealots

XML与逗号分隔的文本文件

  •  11
  • NoMoreZealots  · 技术社区  · 17 年前

    好吧,我读过几本关于XML的书,写了一些程序来把它吐出来。但问题是。逗号分隔的文件和XML文件都是“人可读的”。但一般来说,逗号分隔的文件比XML文件更容易被我看到;标记通常占用的空间与数据的空间相同,但也不比数据大。这似乎掩盖了我正在阅读的内容,并且格式可能需要一个页面来包含与逗号分隔文件中的单行文本相同的信息。逗号分隔的文件解析起来要简单得多。所以真正的问题是为什么要使用XML?只是因为所有的酷孩子都这么做?

    12 回复  |  直到 12 年前
        1
  •  11
  •   Dana the Sane    17 年前

    这不是唯一的两个选项,您也可以使用 JSON YAML 它比XML轻得多。

    一般来说,如果您有简单的表格数据,没有许多特殊字符,那么csv不是一个坏选择。对于结构化数据,考虑使用其他3种数据中的一种。

        2
  •  16
  •   Community Mohan Dere    9 年前

    优势

    XML比csv有很多优势:

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

    它完全取决于问题域和您试图解决的问题。

    例子

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

    用csv不能这样做。

    缺点

    乔尔·斯波斯基 a great article 关于为什么XML作为一个复杂的数据存储是一个糟糕的选择:它是缓慢的。(与可以用单个CPU指令检索前一个或下一个记录的数据库不同,在XML文档中遍历记录的速度要慢得多。)可以说,这是一个优化问题,通过 waiting 18 months . 因此:

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

    相关问题

    参见: Why Should I Use A Human Readable File Format .

        3
  •  6
  •   Mehrdad Afshari    17 年前

    XML支持复杂、结构化和层次化的事物表示。这与csv所能存储的微不足道相差甚远。

    考虑一个面向对象环境中的复杂对象图。它可以很容易地被序列化为XML文档,但是csv不能处理这样的事情。

        4
  •  4
  •   Joel Martinez    17 年前

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

        5
  •  4
  •   ryeguy    17 年前

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

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

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

    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放进去会让人头疼。很快你就可以使用自己的查询语言了。

        6
  •  3
  •   Stefano Borini    17 年前

    XML是人类可读的这一事实并不意味着它是由人类直接读取(甚至编辑)的。

    XML有一组很好的属性,在许多情况下都是很好的选择,特别是当您有人力资源来处理这些属性不可避免带来的额外负担时:验证、定义良好的标准、大量的工具、非常灵活的体系结构,它很好地映射到树模型,这正是许多程序所使用的。它的可读性是一个附加值,它简化了调试(尝试对二进制文件进行调试…)、检查和小的更改,适用于小的情况。

    另一方面,csv是简单、快速和线性的,尽管存在许多方言,而且很好地解析它是 远的 从琐碎的(和增加的问题 琐碎的!).对于大多数涉及数据表的应用程序,csv是最佳选择。

    但是,一般来说,有一些数据表示可以用XML来解决,但不能用CSV(例如树)来解决。另一方面,任何可以用csv表示的数据也可以用xml表示,尽管不能保证(实际上也得到了验证)它将更高效(在空间、易于解析等方面)。这是关于你的格式的“自由度”的问题。XML具有更高的自由度值。CSV较低。XML背后的炒作也与这一事实有关。

    不要成为Hammer综合征的受害者:当您有一个Hammer(XML)时,所有东西看起来都像钉子(必须用XML解决)。现实有很大的不同和细微差别。XML很酷,但它不是任何问题的答案。

        7
  •  2
  •   Spencer Ruport    17 年前

    csv从来不是真正的标准。同样的快速和肮脏的方法,一群人独立地想出。当然,其中一些人比其他人更聪明,并且意识到需要转义字符,但其他人没有。甚至MSSQL也不正确地导出CSV。有一种记录在案的正确的方法来处理XML,所以如果你做的对,并且有人的应用程序或者其他不接受它的东西,当你说“那不是我的错”时,你会有一些影响力。

        8
  •  2
  •   Captain Insano    17 年前

    XML将描述内容,并有大量支持各种语言的库…但它可能会膨胀。如果csv的接收端知道布局并且它是表格式的,我看不出它有什么问题。

        9
  •  1
  •   Kris Krause    17 年前

    XML可以根据契约(模式或DTD)进行验证。

        10
  •  1
  •   russau    17 年前

    XML还具有围绕它的补充技术:xmldom、xpath、xslt、xsd、xml模式

        11
  •  1
  •   C. Dragon 76    17 年前

    您可能喜欢XML而不是CSV的原因之一(当然取决于手头的任务): *几乎所有平台和语言都有用于读取、写入、解析和操作XML的现有库。 *XML对所有字符都有定义良好的编码规则。csv有一些模棱两可的地方,比如如何对作为数据一部分的逗号进行编码。 *XML支持各种数据形状(如层次结构),当数据看起来像表(行和列)时,CSV最有用。

        12
  •  1
  •   erjiang    16 年前

    我喜欢把这种情况下的主要区别看作XML是基于树的,而csv是基于表的。

    也就是说,您可以在XML中嵌套、重新嵌套、省略并通常生成复杂的树结构,而只能在csv中生成简单的2d表。