阅读 StackOverflow 并收听 Joel Spolsky 和 Jeff Atwood 的播客,我开始相信许多开发人员讨厌使用 XML,或者至少尽量避免使用 XML 来存储或交换数据。
另一方面,我很喜欢使用 XML 有几个原因:
- XML 序列化是用大多数现代语言实现的,并且非常易于使用,
- XML 序列化比二进制序列化要慢,当涉及到使用来自多种编程语言的相同数据或打算由人类阅读和理解(甚至用于调试)的情况下(例如,JSON 更难)时,XML 序列化非常有用了解),
- XML 支持unicode,如果使用得当,不同的编码、字符等都没有问题。
- 有很多工具可以轻松处理 XML 数据。XSLT就是一个示例,它可以轻松呈现和转换数据。XPath是另一种,使搜索数据变得容易,
- XML可以存储在一些SQL服务器中,这使得在SQL表中难以存储的复杂数据必须保存和操作的场景成为可能;例如 JSON 或二进制数据,不能直接通过 SQL 操作(除非通过操作字符串,这在大多数情况下很疯狂),
- XML 不需要安装任何应用程序。如果我希望我的应用程序使用数据库,我必须先安装数据库服务器。如果我希望我的应用程序使用 XML,我不需要安装任何东西,
- XML 比 Windows 注册表或 INI 文件更明确和可扩展,
- 在大多数情况下,不存在 CR-LF 问题,这要归功于 XML 提供的抽象级别。
那么,考虑到使用 XML 的所有好处,为什么这么多开发人员讨厌使用它呢?恕我直言,唯一的问题是:
- XML 过于冗长,并且比大多数其他形式的数据需要更多的空间,尤其是在 Base64 编码方面。
当然,有很多场景根本不适合 XML。将 SO 的问题和答案存储在服务器端的 XML 文件中是绝对错误的。或者,在存储 AVI 视频或一堆 JPG 图像时,XML 是最糟糕的使用方式。
但是其他情况呢?XML的弱点是什么?
对于那些认为这个问题不是一个真正的问题的人:
与非封闭的自 1980 年以来的重要计算新发明之类的问题相反,我的问题是一个非常明确的问题,并且清楚地邀请解释其他人在使用 XML 时遇到的弱点以及他们为什么不喜欢它。它不邀请讨论,例如,XML 是好是坏。它也不需要扩展讨论;因此,到目前为止收到的当前答案简短而准确,并提供了我想要的足够信息。
但它是一个 wiki,因为这个问题不可能有一个独特的好答案。
根据 SO 的说法,“不是一个真正的问题”是一个“很难说出这里要问什么的问题。这个问题是模棱两可的、含糊的、不完整的或修辞的,无法以目前的形式得到合理的回答。”
- 这里要问什么:我认为问题本身很清楚,上面的几段文字使它更加清晰,
- 这个问题是模棱两可的,模糊的,不完整的:再一次,没有什么模棱两可的,既不模糊也不不完整,
- 或修辞:不是:我的问题的答案并不明显,
- 并且无法合理回答:已经有几个人对这个问题给出了很好的回答,表明这个问题可以得到合理的回答。
如何评价答案并确定接受的答案似乎也很明显。如果答案给出了 XML 问题的充分理由,那么这个答案就有可能被投赞成票,然后被接受。