1.XML的介绍
XML是可扩展的标记语言。
XML的标签没有被预定义,也就说不是固定的,用户可以根据自身的需要去定义标签。
XML的作用主要是用来存储数据和传输数据
存储数据是用来存储有层级关系,例如省市区,在java领域XML的使用主要是作为框架的配置文件
1.spring framework application.xml
2.mybatis mybatis.xml
3.log4j2 log4j2.xml
传输数据指的是服务提供方返回个服务调用方的数据传输格式,目前主流的数据传输格式为json。
XML目前的版本是1.0
2.XML的元素组成
编写XML文件,可以写哪些内容?
- 文档声明
<?xml version="1.0" encoding="UTF-8" ?>XML的文档声明是可选的,也就是可以不写,但是开发中为了规范都会写文档声明。
XML的文档声明如果写了,它必须放在XML文件的第一行第一列,必须以<?xml开头,和?>结尾,而且必须包含二个属性:version和encoding。
1.version 表示XML的版本号
2.encoding表示XML编码,一般写UTF-8
- 元素(标签)
元素是XML的重要组成部分,元素也被称为标签。
每个XML文件必须要有一个根标签。
标签由开始标签和结束标签组成,中间可以写标签,也可以写文本字符串。
标签可以嵌套使用,必须明确层级的嵌套关系
标签名必须遵守命名的规则和规范
1.标签名不能以数字开头
2.不能使用空格和冒号
3.不能使用xml,XML
4.命名区分大小写
<?xml version="1.0" encoding="UTF-8" ?>
<users>
<user>
<id>1001</id>
<name>admin</name>
<password>12345</password>
</user>
<user>
<id>1002</id>
<name>jack</name>
<password>6666</password>
</user>
</users>- 属性
属性是标签(元素)的组成部分,属性只能是定义在开始标签中,
属性的定义格式,属性名=属性值,属性值需要使用双引号包含起来。
开始标签中可以定义多个属性,但是多个属性的属性名不能相同。
属性名和标签名一样,也要遵守命名规则和规范。
<?xml version="1.0" encoding="UTF-8" ?>
<users>
<user id="1001" country="china" source="android">
<id>1001</id>
<name>admin</name>
<password>12345</password>
</user>
<user id="1002" country="china" source="iso">
<id>1002</id>
<name>jack</name>
<password>6666</password>
</user>
</users>- 注解
注释就是对xml标签的说明
快捷键:Ctrl+/
<!--注释对xml文件的说明-->- 转义字符
在xml中有些字符是无法识别的,此时就需要使用xml的转义符来表示。
例如:&使用 & ; 来表示
< 使用 < ; 来表示 - 字符区
CDATA内部所有的内容都会当做文本解析,使用字符区解决xml中有些字符无法识别的问题。
IDEA中CDATA中的快捷键是CD+回车。
<?xml version="1.0" encoding="UTF-8" ?>
<!--注释对xml文件的说明-->
<users>
<user id="1001" country="china" source="android">
<id>1001</id>
<name>admin</name>
<password>12345</password>
<salary>salary>500 & salary < 3000</salary>
</user>
<user id="1002" country="china" source="iso">
<id>1002</id>
<name>jack</name>
<password>6666</password>
<salary><![CDATA[
salary> 500 & salary < 3000
]]></salary>
</user>
</users>3.XML约束的介绍
由于xml的标签是没有预定义的,在编写xml文件的时候可以添加任何的额标签,这样不利于解析。
在xml的技术例可以去编写一个xml约束文件来约束xml编写的规范,这被称为xml约束。
xml约束的类型有如下二种:
1.DTD约束(文件的后缀名是.dtd)java web项目的web.xml使用的就是DTD约束。
2.Schema约束(文件的后缀名为.xsd)spring framework的application.xml使用的就是Schema约束。
Schema约束比DTD约束更强大。
1.数据的类型更加完善
2.对元素的出现的次数限制更加灵活
在日常开发中,通常我们不会去编写约束文件,但是我们需要根据约束文件编写符合规范的xml文件,因此看懂即可。
xml约束约束xml文件的内容
1.约束xml标签的层级关系(根标签,子标签,子子标签)
2.约束标签(名称,类型)
3.约束标签的属性(属性名,属性类型,属性约束)
4.XML约束-DTD约束
首先了解一下数量词
- +表示元素可以出现1-n个
- *表示可以出现0-N个
- ,表示元素必须按照指定的顺序出现
- | 表示枚举中的一个
1.约束标签的层级关系
<!ELEMENT 标签 (子标签)><?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT users (user+)>
<!ELEMENT user (id,name,password)>2.约束标签
<!ELEMENT 标签名 (标签类型)>标签的类型:
- EMPTY 空类型
- ANY 任意类型
- #PCDATA 字符串
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT password (#PCDATA)>3.约束标签的属性
<!ATTLIST 标签名
属性名 属性类型 属性约束
属性名 属性类型 属性约束
属性名 属性类型 属性约束
属性名 属性类型 属性约束
>属性类型
- CDATA :表示文本字符串
- ID: 表示在xml文件中唯一的,而且不能以数字开头
- ENUMERATED:表示属性的类型是枚举,只能从枚举的列表中选一个
属性约束
- REQUIRED:表示该属性必须存在
- IMPLED:表示该属性可有可无
- FIXED:表示该属性有固定值 格式为#FIXED “固定值”
<!ATTLIST user
id ID #REQUIRED
country CDATA #IMPLIED
platform CDATA #FIXED "ittimeline"
source(android|iso|wechat) "android"
>DTD约束的使用
根据DTD约束文件的位置不同,使用方式可以分为三种
1.外部DTD-本地DTD,DTD文档在本地磁盘路径,但是和xml文件不是在同一个文件中,DTD文档和xml文件通常在同一个目录下。
<!DOCTYPE 根元素 SYSTEM 'DTD约束的文件名'><!DOCTYPE users SYSTEM 'user.dtd'>2.外部的DTD-公共DTD,DTD文件在网络上,一般都是由框架提供的,也是我们使用最多的。
<!DOCTYPE 根元素 PUBLIC 'DTD约束的文件名' "DTD文档的URL">3.内部DTD,XML文件和DTD文档在一个XML文件中,DTD约束只会针对当前XML文件有效
<!DOCTYPE 根元素 [元素约束声明]><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE users [
<!ELEMENT users (user+)>
<!ELEMENT user (id,name,password)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ATTLIST user
id ID #REQUIRED
country CDATA #IMPLIED
platform CDATA #FIXED "ittimeline"
source (android|iso|wechat) "android"
>
<!-- 一定要有空格!!!!!!!-->
]>
<!--注释对xml文件的说明-->
<users>
<user id="s1001" country="china" source="android">
<id>1001</id>
<name>admin</name>
<password>12345</password>
<!-- <salary>salary>500 & salary < 3000</salary>-->
</user>
<user id="s1002" country="china" source="iso">
<id>1002</id>
<name>jack</name>
<password>6666</password>
<!-- <salary><![CDATA[-->
<!-- salary> 500 & salary < 3000-->
<!-- ]]></salary>-->
</user>
</users>5.XML约束-Schema约束
Schema约束的定义
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.ittimeline.net"
elementFormDefault="qualified"
>
<!-- 标准的命名空间,固定写法-->
<xs:element name="orders">
<xs:complexType>
<!-- 定义复杂标签 可以包含多个子标签-->
<xs:sequence maxOccurs="3" minOccurs="1">
<!-- 最多有几个子标签,最小有几个子标签-->
<xs:element name="order">
<xs:complexType>
<xs:sequence>
<!-- 按照子标签元素的内容排序-->
<xs:element name="id" type="xs:unsignedInt"></xs:element>
<xs:element name="address" type="xs:string"></xs:element>
<xs:element name="bookTime" type="xs:dateTime"></xs:element>
<xs:element name="amount" type="xs:double"></xs:element>
</xs:sequence>
<!--定义属性-->
<xs:attribute name="orderId" type="xs:unsignedInt" use="required"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>6.Schema约束的使用
<?xml version="1.0" encoding="UTF-8" ?>
<orders xmlns="https://www.ittimeline.net"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.ittimeline.net order.xsd">
<order orderId="1001">
<id>1001</id>
<address>上海市黄浦区</address>
<bookTime>2021-06-20T08:00:00</bookTime>
<amount>8888.88</amount>
</order>
<order orderId="1002">
<id>1002</id>
<address>上海市长命桥</address>
<bookTime>2021-06-20T08:00:00</bookTime>
<amount>8888.88</amount>
</order>
<order orderId="1003">
<id>1003</id>
<address>上海市静安区</address>
<bookTime>2021-06-20T08:00:00</bookTime>
<amount>8888.88</amount>
</order>
</orders>
















