XML 和 JSON
XML 和 JSON 提供了在网络中进行数据存储和传输的两种不同格式。它们都是以与平台无关的描述方式对信息进行组织,因此可以很方便地在网络中进行传输。同时它们也可以用作配置文件。XML 的出现要早于 JSON,是 W3C 的推荐标准(1998年推出 1.0 版),后来出现的 JSON 以其更加轻量的优势逐渐称为主流的数据格式。
1 XML
-
语法
全名 Extensible Markup Language,即可扩展标记语言。XML 通过自定义标签组织数据信息。下面看一个 XML 文档的例子。
<?xml version="1.0" encoding="UTF-8" ?> <!--文档声明 --> <library> <book id="1000"> <name>水浒传</name> <author>施耐庵</author> <info>讲述宋朝时期的一帮好汉从壮大到消亡的精彩故事。</info> </book> <book id="1001"> <name>平凡的世界</name> <author>路遥</author> <info>讲述了上个世纪七八十年代黄土高原上一群普通人的悲欢。</info> </book> </library>
文档的第一行
<?xml version="1.0" encoding="UTF-8" ?>
是文档声明。下一行定义了文档根元素,比如这里是<library>
。XML 中每个开始标签都有对应的结束标签,比如<name>
为开始标签,</name>
为结束标签。根元素的结束标签在最后一行,如这里的</library>
。一个元素就是一个开始标签到结束标签的部分,比如<name>水浒传</name>
就是一个元素。元素中可以包含文本或者其它元素,如<book>
元素中包含了<name>
、<author>
和<info>
三种元素,根元素包含了其它的所有元素。元素可以拥有属性,属性写在开始标签中,如<book>
拥有id
属性。<!-- -->
是 XML 的注释格式,如第一行后面的<!--文档声明 -->
。可以看出,XML 文档以一种树结构的形式在组织信息。其中跟元素是所有其它元素的父元素。每个元素的上一级元素就是它的父元素,如这里
<name>平凡的世界</name>
的父元素就是以<book id="1001">
标签开始的元素,也可以说前者是后者的子元素。元素是可以不断嵌套的,也就是说,每个元素都可以拥有子元素。但是元素之间不能交叉。比如下面的这种写法是非法的表示:<name>平凡的世界<author></name>路遥</author>
XML 中的标签名称是自定义的,并且没有任何保留字,名称的定义必须遵循的规范是:
- 可以含字母、数字以及其他的字符
- 不能以数字或者标点符号开始
- 不能以字符 “xml”(或者 XML、Xml)开始
- 不能包含空格
XML 可扩展的意义是,我们在原有的 XML 文档中加入新的元素,并不会影响应用程序从其中提取原来的元素信息。所以,可以在不中断应用程序的同时对 XML 文档进行扩展。
CDATA 语法:
CDATA 语法可以添加不由 XML 解析器解析的文本数据。比如 JavaScript 代码中包含大量的 "<" 或 "&" 字符,这些字符在 XML 元素中都是非法的,为了在 XML 文件中包含 JavaScript 代码,就可以将其定义为 CDATA。CDATA 部分由
<![CDATA[
开始,由]]>
结束,中间包含需要被解析器忽略的内容。 -
Java 解析 XML
XML 的解析方式有四种:SAX解析、DOM解析、JDOM解析和DOM4J解析。前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。每种解析方式的具体内容可以看这位博客园大佬的介绍。
简单来说:
- SAX (Simple APIs for XML,XML简单应用程序接口)解析采用的是顺序访问的方式,并基于事件触发对文档进行分析,当解析到一个标签的开始/结束/内容/属性时,触发事件并进行相应的处理;
- DOM (Document Object Model,文档对象模型)解析将一个 XML 文档转换成一个对象模型的集合(DOM 树),应用程序通过操作这个对象模型实现对 XML 文档数据的处理。
- JDOM 是针对 Java 的 DOM 解析,它简化了与 XML 的交互并且比使用 DOM 的实现更快。
- DOM4J 是 JDOM 的一种智能分支,是一个非常优秀的 Java XML API,具有性能优异、功能强大和极端易用使用的特点。它是开源的,目前在许多开源项目中大量被采用,如 Hibernate。
2 JSON
全名 JavaScript Object Notation,即 JavaScript 对象简谱,是一种轻量级的数据交换格式。JSON 的数据格式相较于 XML 更加简单,易于读写,格式都是压缩的,占用带宽小;
{
books: [
{
id: "1000", name: "水浒传", author: "施耐庵",
info: "讲述宋朝时期的一帮好汉从壮大到消亡的精彩故事。"
},
{
id: "1001", name: "平凡的世界", author: "路遥",
info: "讲述了上个世纪七八十年代黄土高原上一群普通人的悲欢。"
}
]
}
XML 和 JSON 的比较可以看这里。