XML 和 JSON

XML 和 JSON 提供了在网络中进行数据存储和传输的两种不同格式。它们都是以与平台无关的描述方式对信息进行组织,因此可以很方便地在网络中进行传输。同时它们也可以用作配置文件。XML 的出现要早于 JSON,是 W3C 的推荐标准(1998年推出 1.0 版),后来出现的 JSON 以其更加轻量的优势逐渐称为主流的数据格式。

1 XML

  1. 语法

    全名 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[ 开始,由 ]]> 结束,中间包含需要被解析器忽略的内容。

  2. 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 的比较可以看这里

参考

  1. XML 教程
  2. XML解析——Java中XML的四种解析方式
  3. JSON与XML的区别比较
posted @ 2021-09-05 19:39  alterwl  阅读(52)  评论(0编辑  收藏  举报