XML概述
XML的全称为(EXtensible Markup Language),是一种
可扩展
的标记语言
标记语言:通过标签来描述数据的一门语言
可扩展:标签的名字是可以自定义的
可以理解为:
XML文件是由很多标签组成的,而标签名是可以自定义的。
- 作用
- 用于进行存储数据和传输数据
- 作为软件的配置文件
XML标签
- 标签由一对尖括号和合法标识符组成
- 标签必须成对出现
- 特殊的标签可以不成对,但必须要有结束标记
- 标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来
- 标签要正确的嵌套
XML语法规则
- XML文件的后缀名为:XML
- 文档声明必须是第一行
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
version: 该属性必须存在
encoding: 该属性不是必须的,打开当前XML文件的时候应该是使用什么字符编码表
standalone: 该属性不是必须的,描述XML文件是否依赖其他的XML文件。取值为yes/no - 必须存在一个根标签,有且只有一个
- XML可以定义注释信息
- XML文件中可以使用以下特殊字符
< < 小于
> > 大于
& & 和号
' ' 单引号
" " 双引号
- XML文件中可以存在CDATA区
<![CDATA[ ...内容... ]]>
解析XML
- 常见的解析思想
DOM 文档对象模型
就是把文档的各个组成部分看做成对应的对象。
会把XML文件全部加载到内存中。
在内存中形成一个树形结构,再获取对应的值。
- 常见的解析工具
JAXP: sun公司提供的一套XML的解析api
JDOM: 开源组织提供了一套XML的解析API
DOM4J: 开源组织提供了一套XML的解析API
pull: 主要应用在Android手机端解析XML
// DOM4J
// 1. 获取一个解析器对象
SAXRader saxRader = new SAXRader();
// 2. 利用解析器把XML文件加载到内存中,并返回一个文档对象
Docment document = saxRader.read(new Filr("path\\xml.xml"));
// 3. 获取到根标签
Element rootElement = document.getRootElement();
// 4. 获取根标签里面的元素
rootElement.elements("元素名称");
XML约束
-
什么是约束
用来限定xml文件中可使用的标签以及属性,告诉程序员,XML该怎么写
-
约束分类
- DTD
- schema
-
DTD约束
- 创建一个文件,这个文件的后缀为dtd
- 看xml文件中使用了哪些元素
<!ELEMENT>可以定义元素 - 判断元素是简单元素还是复杂元素
简单元素:没有子元素
复杂元素:有子元素的元素
<!-- XML -->
<persons>
<person>
<name>张三</name>
<age>22</age>
</person>
</persons>
<!-- DTD -->
<!ELEMENT persons (person)>
<!ELEMENT person (name, age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!-- 引入DTD -->
<!DOCTYPE person SYSTEM 'persondtd.dtd'>
-
引入DTD约束的三种方法
- 引入本地DTD
<!DOCTYPE person SYSTEM 'persondtd.dtd'>
- 在XML文件内部引入
<!DOCTYPE person [ <!ELEMENT persons (person)> <!ELEMENT person (name, age)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> ]>
- 引入网络dtd
<!DOCTYPE person public "dat文件名称" "dtd文档的URL">
-
DTD语法规则 定义一个元素格式为:
简单元素:
EMPTY 表示标签体为空
ANY 表示标签体可以为空也可以不为空
PCDATA 表示该元素的内容部分为字符串
复杂元素:
直接写子元素名称。
多个子元素可以使用',',或者'|'隔开;
','表示定义子元素的顺序
'|'表示子元素只能出现任意一个
'?'零或者一次
'+'一次或多次
'*'零或者多次
如果不写则表示出现一次
定义一个属性的格式为:
属性的类型:
CDATA类型:普通字符串
属性的约束:
#REQUIRED: 必须的
#IMPLIED: 属性不是必须的
#FIXED value: 属性值是固定的
- schema和dtd的区别
1. schema约束文件也是一个xml文件,符合xml语法,这个文件的后缀名xsd
2. 一个xml中可以引用多个schema约束文件,多个schema使用命名空间区分
3. dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持很多歌数据类型
4. schema语法更加复杂
schema文件用来约束一个xml文件,同时也被别的文件约束
- schema创建步骤
- 创建一个文件,这个文件的后缀名为xsd
- 定义文档声明
- schema文件的根标签为:<schema>
- 在<schema>中定义属性:xmlns="www.w3.org/2001/XMLSch…"
- 在<schema>中定义属性:targetNamespage="唯一url地址",指定当前这个文件的命名空间
- 在<schema>中定义属性:elementFormDefault="qualified",表示当前的文件是一个质量良好的文件。
- 通过element定义元素
- 判断当前元素是简单元素还是复杂元素
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?\>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespage="http://www.juejin.com/qizhexiaoheima"
targetNamespage="qualified"
>
<element name="根标签名字">
<!-- 表示复杂元素 -->
<complexType>
<sequence>
</sequence>
</complexType>
</element>
</schema>
- 引入schema文件
- 在根标签上定义属性 xmlns="www.w3.org/2001/XMLSch…"
- 通过xmlns引入文件命名空间
- 给某一个xmlns属性添加一个标识,用于区分不同的命名空间,格式为:xmlns:标识="命名空间地址",标识可以是任意值,但是一般取值都是xsi。
- 通过xsi:schemaLocation指定命名空间所对应约束文件路径,格式为:xsi:schemaLocation="命名空间url 文件路径"
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?\>
<persons
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmls="约束文件的命名空间"
xsi:schemaLocation="命名空间 文件路径"
>
<person>
<name>张三</name>
</person>
</persons>
- Schema定义属性
<addtibute name="id" type="string" use="required"></attribute>