XML有哪些缺点?

Ars*_*nko 6 xml data-storage xml-serialization data-exchange

阅读StackOverflow并听Joel Spolsky和Jeff Atwood的播客,我开始相信很多开发人员讨厌使用XML,或者至少尽量避免使用XML来存储或交换数据.

另一方面,我喜欢使用XML有很多原因:

  • XML序列化以大多数现代语言实现,并且非常易于使用,
  • 比二进制序列化慢,XML序列化在使用来自多种编程语言的相同数据或者用于读取和理解的情况时非常有用,即使对于人类的调试(例如,JSON,更难)了解),
  • XML支持unicode,如果使用得当,不同的编码,字符等都没有问题.
  • 有许多工具可以轻松使用XML数据.XSLT就是一个例子,可以轻松呈现和转换数据.XPath是另一个,可以轻松搜索数据,
  • XML可以存储在某些SQL服务器中,这样就可以保存和操作过于复杂而无法轻松存储在SQL表中的数据.例如,JSON或二进制数据不能通过SQL直接操作(除非通过操作字符串,这在大多数情况下是疯狂的),
  • XML不需要安装任何应用程序.如果我希望我的应用程序使用数据库,我必须首先安装数据库服务器.如果我希望我的应用程序使用XML,我不需要安装任何东西,
  • XML比例如Windows注册表或INI文件更加明确和可扩展,
  • 在大多数情况下,由于XML提供的抽象级别,没有CR-LF问题.

那么,考虑到使用XML的所有好处,为什么这么多开发人员讨厌使用它呢?恕我直言,唯一的问题是:

  • XML过于冗长,并且需要比大多数其他形式的数据更多的地方,特别是在涉及Base64编码时.

当然,有很多情况下XML根本不适合.在服务器端的XML文件中存储SO的问题和答案绝对是错误的.或者,在存储AVI视频或一堆JPG图像时,XML是最糟糕的事情.

但其他场景呢?XML有哪些缺点?


对于那些认为这个问题不是真正问题的人:

1980年以来计算机中非封闭的重要新发明之类的问题相反,我的问题一个非常明确的问题,并且明确地邀请解释其他人在使用XML时遇到的弱点以及他们为什么不喜欢它.例如,它不会邀请讨论XML是好还是坏.它也不需要进行长时间的讨论; 因此,到目前为止收到的当前答案简短而精确,并提供了我想要的足够信息.

它是一个维基,因为这个问题没有一个独特的好答案.

根据SO,"不是一个真正的问题"是一个问题,"很难说这里有什么问题.这个问题含糊不清,含糊不清,不完整或修辞,无法以现有形式得到合理回答."

  • 这里有什么问题:我认为问题本身非常清楚,上面的几段文字使它更加清晰,
  • 这个问题含糊不清,含糊不清,不完整:再一次,没有任何含糊不清,既不模糊也不完整,
  • 或修辞:事实并非如此:我的问题的答案并不明显,
  • 并且无法合理地回答:几个人已经对这个问题给出了很好的答案,表明这个问题可以合理地回答.

如何评估答案并确定接受的答案似乎也很明显.如果答案给出了XML错误的充分理由,那么这个答案很可能会被投票,然后被接受.

pax*_*blo 6

<xml>
    <noise>
        The
    </noise>
    <adjective>
        main
    </adjective>
    <noun>
        weakness
    </noun>
    <noise>
        of
    </noise>
    <subject>
        XML
    </subject>
    <noise>
        ,
    </noise>
    <whocares>
        in my opinion
    </whocares>
    <noise>
        ,
    </noise>
    <wildgeneralisation>
        is its verbosity
    </wildgeneralisation>
    <noise>
        .
    </noise>
</xml>
Run Code Online (Sandbox Code Playgroud)


bri*_*ght 5

一些弱点:

  • 关联xml文件和外部资源有点困难,这就是为什么新的Office文档格式使用包含骨架xml文件和捆绑在一起的资源文件的zip信封的原因.使用base64编码的另一个选择是非常冗长,并且不允许良好的随机访问,这将带来一个到下一点:
  • 随机访问很困难.读取xml文件的两种传统模式 - 构造DOM或仅向前SAX样式读取都不允许真正的随机访问.
  • 对文件的不同部分的并发写访问很困难,这就是为什么它在Windows可执行清单中的使用容易出错的原因.
  • xml文件使用什么编码?严格来说,你首先猜测编码,然后读取文件并验证编码是否正确.
  • 很难对文件的各个部分进行版本控制.因此,如果要提供粒度版本控制,则需要拆分数据.这不仅仅是一个文件格式问题,而且还因为工具通常提供每个文件的语义 - 版本控制工具,DropBox等同步工具.