XML概述
XML(eXtensible Markup Language),是一种可扩展的标记语言,类似HTML(超文本标记语言)。
XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。(XML从第一个版本发布之后,到目前为止从来没有更新过)
XML是一种通用的数据交换格式(关系型数据库),许多系统的配置文件都使用XML格式,JSP文档也逐步向XML语法格式过渡,许多项目都采用XML作为数据交换格式(WebService),典型代表:WebService就是不同的项目,或者不同的语言交换数据的技术;
在日常应用中会经常看见XML格式的文件,掌握XML是软件开发人员的一项基本技能,Struts1.x(相对很少用),struts2.x,spring,hibernate,mybatis等任意一个javaee框架中都要用到XML。(必须通过XML去做配置)
综上,XML可以传输数据,也可以存储数据
(1) 注意事项
1.XML标签命名自定义【推荐英文】,标签名中不能包含空格
2.XML空格和换行都表示数据,严格区分大小写
3.XML中特殊字符表示的数据需要使用特殊字符编码和HTML一样
4.CDATA区中的数据不会被识别为语法
(2) 约束
XML的约束不需要自己大量的书写,此处只要求大家会看
XML约束的目的:规范XML中书写的内容,XML约束分为:DTD约束、Schema约束
① DTD约束
DTD约束文件与XML文件关联
<!DOCTYPE contacts SYSTEM "contacts.dtd">
DTD细节
<!--contacts下有一个或多个linkman,+代表起码一个-->
<!ELEMENT contacts (linkman+)>
<!--linkman下包含有按顺序的四个标签-->
<!ELEMENT linkman (name,email,address,group)>
<!--给标签内填充数据内容-->
<!ELEMENT name (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT group (#PCDATA)>
- 声明一个标签下有嵌套子标签,多个不同标签使用逗号隔开
- 声明标签下是直接的内容,#PCDATA代表数据的意思,官方说法叫被解析的字符数据
注意:DTD约束中若出现错误,不会报错
② Schema约束
Schema约束文件与XML文件关联
<contacts xmlns="http://itsource.cn"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation="http://itsource.cn contactsSchema.xsd">
Schema细节
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://itsource.cn" elementFormDefault="qualified">
<!--声明了一个根标签,contacts-->
<xs:element name="contacts">
<!--contacts标签下的元素是复杂类型,也就是包含其他元素-->
<xs:complexType>
<!--规定contacts下元素出现的顺序和次数,maxOccurs代表最大次数-->
<xs:sequence maxOccurs='unbounded'>
<xs:element name="linkman">
<xs:complexType>
<xs:sequence>
<xs:element name='name' type='xs:string' />
<xs:element name='email' type='xs:string' />
<xs:element name='address' type='xs:string' />
<xs:element name='group' type='xs:string' />
</xs:sequence>
<xs:attribute name="id" type="xs:long" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Schema约束本质上来说,是一个XML,Schema约束和DTD约束最大的区别就在于:前者使用XML语法来约束Schema本身的内容,即使写错也会报错,但Schema同样也存在致命的缺点,那就是约束本身语法实在有些复杂。
(3) DOM模型
DOM(Document Object Model)文档对象模型。直白的讲就是Java程序解析结构化文档的时候,在内存中生成的包含当前结构化文档所有内容的一个对象模型。所以说DOM并不是一门技术,而是一门思想,或者更明确的讲是一门访问结构化文档的一种方式。那么当前我们学过的结构化文档有HTML、XML。DOM模型实际上描述的就是标签之间的层级结构。
下面是一个简单的XML文件的代码示例
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person>
<age>21</age>
<sex>男</sex>
<name>至尊宝</name>
</person>
<person>
<name>白晶晶</name>
<age>999</age>
<sex>女</sex>
</person>
</persons>
其中persons为根标签,一个xml文件中只能有一个根标签