文章目录
- 一、XML概述
- 二、XML的标签语法
- 三、XML约束
- 四、DTD约束
- 五、Schema约束
- 六、XML解析
- 七、Dom4j:
一、XML概述
简介:
英文名称:eXtensible Markup Language
中文名称:可扩展标记语言,标记又称为标签或元素,由标签组成的一门语言
XML的作用:
1.用于作为框架的配置文件
2.用于不同平台之间的数据交换
3.用来当成一个小型数据库使用
XML与HTML的区别:
区别 | HTML | XML |
功能 | 制作网页,主要用于表示层 | 用于配置文件,用于数据访问层 |
大小写 | 不区分大小写 | 区分大小写 |
语言严谨 | 不严谨,如果一个标签有开头没有结束,浏览器也可以解析 | 严谨,标签开头和结尾必须严格配对 |
可拓展性 | 没有可拓展性,所有标签都是固定好,每一个标签功能固定 | 所有标签都是人为创造的,可以拓展 |
XML语法包含的内容:
1.文档声明
2.标签元素Element
3.属性 Attribute
4.注释 Comment
5.转义字符(实体字符)
6.字符数据区(用于显示大量的特殊字符的时候)
7.处理指令(不使用了,因为是用来配置字体大小和颜色等)
XML文档声明:
<?xml version="1.0" encoding="UTF-8" ?>
<!--
文档声明格式:
version:版本号
encoding:编码格式
必须写在xml文件的第一行第一列
-->
二、XML的标签语法
分类 | 语法 |
有主体标签 | <开始标签> 内容</结束标签>,eg: |
无主体标签 | <标签名/>,eg: |
<?xml version="1.0" encoding="UTF-8" ?>
<!--
文档声明格式:
version:版本号
encoding:编码格式
必须写在xml文件的第一行第一列
-->
<person>
<name>ps</name>
<sex>nan</sex>
<age/>
</person>
注意事项:
1.一个xml文件只能由一个跟标签,也就是所有内容必须都放到根标签内
2.标签中可以嵌套若干子标签,但是必须合理嵌套,不能交叉嵌套
3.开始标签和结束标签必须成对出现
标签命名规则:
1.标签区分大小写
2.不能以数字开头,只能以中文、字母或下划线
3.标签名不能包含空格
4.标签中不要使用(:),因为这是(:)是命名空间的一个特殊符号
XML属性和注释:
属性语法 | 注意事项 |
<开始标签 属性名=属性值>内容</结束标签> | 属性值必须使用引号括起来,单引号和双引号都可以 属性必须写在开始标签中,多个属性之间空格分割 |
注释格式 | 注意事项 |
| 注释不能嵌套注释 |
XML转义字符:
语法:以(&)开头以(;)结尾
说明 | 字符 | 转义字符 |
小于 | < |
|
大于 | > |
|
双引号 | “” |
|
单引号 | ‘’ |
|
与符号 | & |
|
CDATA区:
Chrarcter Data 字符数据区
CDATA区作用:
保证数据原样输出,不被解析
CDATA区格式:
<![CDATA[ 字符数据 ]]>
<person>
<name>ps</name>
<sex>nan</sex>
<age/>
<sql>
<!--这样编写的语句就会被原样输出-->
<![CDATA[select * from mysql where id > 50]]>
</sql>
</person>
三、XML约束
为什么要用约束:
如果不使用约束,xml文档中的标签、标签内容、标签属性等可以随意填写,造成了很多的无效
作用:
1.用来约束xml文档的结构
2.让xml文档书写更加规范
xml约束的分类:
1.DTD约束
2.Schema约束
四、DTD约束
语法:
<!ELEMENT 元素名 元素的类别或内容>
元素的类别与三种:
(#PCDATA): Parsed Character Data 被解析的字符串数据,即文本内容
EMPTY: 表示一个空的标签 如:<BR/> 的DTD为:<!ELEMENT BR EMPTY>
ANY: 任意内容都可以
元素的内容修饰符号:
? : 表示出现0或1次
* : 表示出现0或n次
+ : 表示出现1或n次
() : 用来给元素分组
| : 表示在列出的对象中选择一个
, : 表示组中的元素必须按照指定的顺序出现
属性约束语法:
<!ATTLIST 元素名
属性名 属性类型 类型选项
属性名 属性类型 类型选项>
使用样例:
<!--dtd约束文件-->
<!ELEMENT BookShelf (Book+)>
<!ELEMENT Book (title,author,price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST author
name CDATA #REQUIRED
age CDATA #IMPLIED
job CDATA #FIXED "程序员"
hobby CDATA "旅游">
<!--xml文件-->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE BookShelf SYSTEM "BookShelf.dtd">
<!--
文档声明格式:
version:版本号
encoding:编码格式
必须写在xml文件的第一行第一列
-->
<BookShelf>
<Book>
<title>西游记</title>
<author name="吴承恩" age="18">吴承恩</author>
<price>9.9</price>
</Book>
</BookShelf>
导入DTD约束语法:
语法 | 说明 |
| 不公开使用,私有的 |
| 公开使用,使用范围广 |
五、Schema约束
概述:
约束文件扩展名 (XML Schema Definition) XML 模式定义 : xsd
约束文件本身也是XML文件,所以也有根元素,根元素的名字叫 : schema
两个概念:
模式文档:制定约束的XML文档(类似于:类)。
实例文档:被约束的XML文档(类似于:对象)。
注意:
Schema约束可以两个约束一个xml文档,而DTD只能一个约束一个
命名空间:
解决标签命名冲突的问题,通过设定前缀
命名空间概述 | 说明 |
定义位置 | 默认文档的根标签中 |
定义格式 | targetNamespace=“命名空间名称” |
引入位置 | 在实例文档的根标签中 |
引入格式 | xmlns:前缀=“命名空间名称” |
总结:
虽然schema功能强大,但是编写比DTD复杂很多,由于开发中很少会自己编写schema文件
所以只要能在看懂xsd的情况下,编写出正确的xml文件即可
六、XML解析
概述:
通过Java代码从xml文档中获取数据的过程
XML解析方式:
DOM方式解析:
概述:一次性加载整个xml文档到内存中,会在内存中生成一个DOM树
优点:可以对树上的节点对象进行增删查改
缺点:如果XML文档内容比较多,则占据比较大的内存
SAX方式解析:
概述:从上往下一行一行解析,解析一行释放一行
优点:占据内存少
缺点:只能读取数据,不能增删改操作
七、Dom4j:
解析方式:
采用DOM的方式解析
Dom4j的解析原理:
一次性加载整个xml文档到内存中,会在内存中生成一个DOM树
Dom树的组成元素:
Document : 文档对象,代表整个XML文档,必须先获得该对象才能获得XML文档的数据
Element : 元素对象(标签对象),每个标签都是一个Element对象
Attribute : 属性对象,标签中的每一个属性都是一个attribute对象
Text : 文本对象,标签体中的文本内容,都是一个text对象
Node : 节点对象,DOM树上的每一个元素都是一个Node对象
Comment : 注释对象