在这一章中,主要介绍可扩展标记语言XML,以及使用Java语言对XML文档进行操作的方法。读者将学习JDOM提供的jar包中的类和方法,来操作XML文档。
22.1 XML概述
可扩展标记语言(eXtensible Markup Language,简称XML),是由万维网协会(W3C)推出的新一代数据交换的标准。可以用于定义Web网页上的文档元素和商业文档,同时还可以用于复杂结构数据的表示和传输。
22.1.1 什么是XML
在学习XML之前,先来看一段简单的XML文档,如下代码22-1所示。
代码22-1 XML文档示例Demo.xml
<?xml version="1.0" encoding="gb2312"?>
<people>
<person>
<name>Wang Xiao Yue</name>
<sex>male</sex>
<age>24</age>
</person>
<person>
<name>Xu Guang Yang</name>
<sex>male</sex>
<age>22</age>
</person>
</people>
这是一段很简单的XML文档,熟悉HTML文本标记语言的人可能会发现,XML的书写格式与HTML十分的相似,这是因为XML与HTML格式,都是通用标记语言(SGML)的下一代语言。写法虽然相似,但却有着重要的区别,大家可以理解为:HTML是描述文本结构和样式的,主要是文本的显示和控制;而XML是一个协议语言,是用来描述数据和数据结构的语言,是一种描述数据的标准,同时必须依赖高级语言才能实现其作用。
另外,在XML文档与HTML文档的写法规则上,也存在一些差别,包括以下几个方面。
XML文档中区分大小写,而HTML文档中并不区分大小写。
在HTML文档中若存在列表键时,可以省略结尾标记,而在XML文档中,所有标记都不能省略。
在XML文档中,属性值必须写在引号中,而在HTML文档中并没有严格规定。
一个XML文档都是由一些简单或复杂元素构成的,其结构与HTML基本相同,都包含元素、属性和值。XML元素都是用一个标签开始,并用一个相应的标签表示结束。复杂元素中可以包含子元素,而简单元素中就只能包含属性和内容。例如在代码22-1中,“people”是一个复杂元素的元素名,其开始标签为<people>,结束标签为</people>,该元素中包含2个person子元素,因此为复杂元素;同样,“person”元素也是复杂元素,而其中所包含的三个子元素均为简单元素,例如名为“name”的子元素,其开始标签为<name>,结束标签为</name>,该元素的内容为字符串“Wang Xiao Yue”。这个XML文件清晰的描述了两个人的数据信息,包括每个人的姓名、性别和年龄。如图22-1所示,是一个完整的简单元素的结构示意图。
22.1.2 XML的命名空间
XML的命名空间是W3C推出的一个标准,是用来统一命名XML文档中的元素和属性的机制。使用命名空间,可以明确标识出XML文档中元素、属性以及其他标记,可以避免名称之间冲突所带来的问题。其实质就是在元素、属性名之前加上特定的命名空间,使它们都具有自己的领域,同时也方便程序员查询和提取数据。在XML文档中,一般都用URL来表示命名空间,但是一般的URL都比较长,放在元素和属性名称前难于书写,因此,会使用一个简短的字符来代替,并称之为命名空间的前缀。命名空间声明的一般形式如图22-2所示。
如代码22-2及22-3所示,分别使用显式和隐式方式来限定XML文档,同时也可以限定XML文档中的某一部分数据。
代码22-2 XML文档中显式使用命名空间示例Demo1.xml
<?xml version="1.0" encoding="gb2312"?>
<people xmls:mn1=”http://www.myjava1.com/”
xmls:mn2=”http://www.myjava2.com/”
xmls:mn3=”http://www.myjava3.com/”>
<mn1:person>
<mn3:name>Wang Xiao Yue</mn3:name>
<sex>male</sex>
<age>24</age>
</mn1:person>
<mn2:person>
<name>Xu Guang Yang</name>
<sex>male</sex>
<age>22</age>
</mn2:person>
</people>
代码22-3 XML文档中隐式使用命名空间示例Demo2.xml
<?xml version="1.0" encoding="gb2312"?>
<people>
<person xmls="http://www.myjava1.com/">
<name xmls="http://www.myjava3.com/">Wang Xiao Yue</mn3:name>
<sex>male</sex>
<age>24</age>
</person>
<person xmls=”http://www.myjava2.com/”>
<name>Xu Guang Yang</name>
<sex>male</sex>
<age>22</age>
</person>
</people>
22.1.3 XML文档结构
一个XML文档的结构包括4个部分,分别如下。
XML的声明一般XML文档的第一行都是XML的声明,用来指出当前XML文档的版本号,有时也会指明文档编码。XML文档的声明如下所示:
<?xml version="1.0" ?>
这里的标签使用“<?”开始、“?>”结束,这在XML文档中称之为处理指令。
根元素 每个XML文件都包含有惟一的一个根元素,其包含了其他的子元素,例如在代码22-3中,“people”就是该XML文档的根元素。
元素 每一个XML文档中,其根元素中都包含了多个子元素,通常称之为XML文档中的元素。XML的元素由三个部分组成,包括起始标签、内容和结束标签。需要注意的是,起始标签与结束标签必须完全对应,同时要保证元素与元素间不能交迭。
属性 属性是依附于元素而存在的,任何一个元素都可以具有或不具有属性。元素若包含多个属性,则属性间用空格分隔,同时属性值需要使用单引号或双引号括起来。例如:
<book language="Chinese" page="500">Think In Java</book>
其中,book元素中包含两个属性,分别是language属性,其值为Chinese,以及page属性,其值为500。
代码22-4中,使用XML文档来表示一个书目的结构,同时使用到XML结构中最基本的4个部分。
代码22-4 使用XML文档来表示一个书目的结构Demo3.xml
<?xml version="1.0" encoding="gb2312"?>
<Library>
<book>
<Author>Zhang</Author>
<Title>c++</Title>
<PublicationDate edition="Trade" isbn="123456">09/2002</ PublicationDate >
<Publisher>publisher1</ Publisher >
<Subject>Computer Programming</Subject>
</book>
<book>
<Author>Wang</Author>
<Title>Java</Title>
<PublicationDate edition="Trade" isbn="654321">07/2003</ PublicationDate >
<Publisher> publisher2</ Publisher >
<Subject>Computer Programming</Subject>
</book>
</Library>
代码22-4中,使用XML文件表示的书目结构,其对应的树型结构如图22-3所示。

图22-3 XML文件对应的树型结构图






