XML 是可扩展标记语言(Extensible Markup Language)的简称。XML 一经推出,就得到了 IT 行业巨头们的响应,如今已被广泛使用。XML 独立于计算机平台、操作系统和编程语言,用来表示数据,简单、灵活、交互性好和可扩展这几个特点是其能被广泛使用的主要原因。
XML 的应用范围主要体现在以下几个方面:
- 存储数据:内存中的数据需要存储到文件中,才能在关闭系统或系统掉电之后,通过文件进行恢复。现如今,用数据库存储数据这种方式使用得最为广泛。因为数据库管理系统不仅能存储数据,而且提供了众多的管理数据的功能,尤其对大量数据的操作,通常都使用数据库。XML 与数据库相比,最大的优势就是简单、通用。
- 系统配置:如今,许多系统的配置文件都使用 XML 文档。使用 XML 文档进行系统配置,配置修改时不需要重新编译,灵活性强。例如 Servlet,需要在
web.xml
文件中进行配置,Spring 的默认配置文件是applicationContext.xml
等。 - 数据交换:在各个分散的应用系统里,因为其平台、系统、数据库、编程语言的差异,保存起来的数据往往只能被本系统调用,形成一个个信息孤岛。整合各个系统的数据信息,或者在两个或多个系统中进行数据交换,往往让 IT 人员非常烦躁。现在利用 XML 交互性好的特点,可以将各个信息孤岛的数据转换成标准的 XML 文件,通过这个标准的 XML 文件进行导入和导出,以达到交换数据的目的。
XML 文档的标签(如、、、等)可以是自定义的,具有可扩展性,这和之后将要学的 HTML 的标签是固定的不同。另外,HTML 的主要作用是通过标签和属性,更好地显示数据,而 XML 是用来存储或交换数据用的,不记录数据的表现形式。
XML 文档总是以 XML 声明开始,即告知处理程序,本文档是一个 XML 文档。在 XML 声明中,通常包括版本、编码等信息,以 <?
开始,以 ?>
结尾。
XML 文档由元素组成,一个元素由一对标签来定义,包括开始和结束标签,以及其中的内容。元素之间可以嵌套(但不能交叉),也就是说元素的内容里还可以包含元素。
标签可以有属性(属性值要加引号),例如 car
标签和 truck
标签都有 id
这个属性。属性是对标签的进一步描述和说明,一个标签可以有多个属性,每个属性都有自己的名字和值,属性是标签的一部分
目前最常用的 XML 解析技术有 DOM 和 SAX。JDK 提供了 JAXP 来使用 DOM 和 SAX,其中 org.w3c.dom
是 W3C 推荐的用于使用 DOM 解析 XML 文档的接口,org.xml.sax
是使用 SAX 解析 XML 文档的接口,javax.xml.parsers
提供处理 XML 文档的类,支持 DOM 和 SAX
学习总结:
- I/O 按照类型分类,可以分为字节流、字符流等;按照流向分类,可以分为输入流和输出流。其中,
输入
和输出
的方向,是以内存为参照点。 File
类生成的对象代表一个特定的文件或目录,并且File
类提供了若干方法对这些文件或目录进行读写等各种操作,File
类及本章讲解的大部分流都在java.io
包下。- 一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是 Internet 上的某个 URL。对于流而言,不用关心数据是如何传输的,只需要从源端输入数据(读),向目的端输出数据(写)。
- JDK 从 1.5 版开始,增加了静态导入的特性,用来导入指定类的某个静态属性或静态方法,或全部的静态属性或静态方法,静态导入使用
import static
语句。 - 输入字节流类继承自抽象类
InputStream
,输出字节流继承自抽象类OutputStream
;读取字符流类继承自抽象类Reader
,写入字符流继承自抽象类Write
。 - 字节流可以处理任何类型的文件,而字符流常用于处理以文字形式存储的文本文件,如
.txt
等。 - 缓冲流的目的是让原字节流、字符流新增缓冲的功能;转换流可以对一些不同类型的流进行类型转换;数据流允许流直接操作基本数据类型和字符串。
- I/O 内容的底层实际模式是装饰器模式,装饰器模式要求包装类和被包装类属于同一个继承体系,并且包装后外观(API)未变,但功能得到了增强。
- XML 可以用于储存数据、系统配置和数据交换,并通过 DOM 和 SAX 等方式进行解析。
- XML 可以通过 DOM 和 SAX 的方式进行解析,DOM 把一个 XML 文档映射成一个分层的对象模型进行解析,而 SAX 是基于事件驱动的。