XML介绍
XML(eXtensible Markup Language,可扩展标记语言) 是一种用于存储和传输结构化数据的标记语言。它的核心特点包括:
- 可扩展性:允许用户自定义标签和数据结构,适应不同场景需求。
- 自描述性:通过标签名称和层级关系,直观描述数据的含义。
- 平台无关性:纯文本格式,兼容几乎所有系统和编程语言。
- 结构化存储:通过嵌套标签清晰表达数据间的层级关系。
XML 的设计初衷是 "存储和传输数据",而非像 HTML 那样专注于"显示数据"。
XML语法
XML编写要求
-
xml文档后缀名
.xml
-
xml第一行必须定义为文档声明
xml<?xml version='1.0'?>
-
xml文档中有且只有一个根标签
-
属性值必须使用引号包围起来
-
标签必须正确关闭。
-
xml标签名区分大小写。
举例:
java
<?xml version='1.0'?>
<users>//这种就是根标签
<user id='1'>//属性值必须用引号包围
<name>zhangsan</name>//标签必须正确关闭,要么是这种关闭,要么是自关闭,比如<br/>
<age>23</age>
<gender>male</gender>
</user>
<user id='2'>
<name>lisi</name>
<age>13</age>
<gender>female</gender>
</user>
</users>
XML组成部分
-
文档声明
格式:
<?xml 属性列表?>
属性列表:
- version:版本号,最好使用1.0因为1.1不向下兼容。这个属性必须添加。
- encoding:编码方式,告知解析引擎当前xml文档使用的编码格式,默认为:ISO-8859-1
- standalone:是否独立,有两个值,yes和no。yes代表不依赖其他文件,no是依赖其他文件。
-
指令:结合css来控制标签的样式的,但是xml的功能已经不是这个了,知道有这玩意就好。
-
标签:标签是自定义的,标签名见名知意就好了。
-
属性:只需要知道id属性值唯一。
-
文本 :如果我们在xml中想写比如说>,<这些必须通过写
⁢
,>
来表示,就很麻烦,但是xml提供了一个办法来解决:CDATA区:在该区域的数据会被原样展示。
格式:
<![CDATA[ 数据 ]]>
约束
我们通过编写xml文档让框架进行解析来实现我们对框架的配置要求。
但是xml的标签是自定义的,故我们在使用框架的时候框架会给出说明文档,说明文档里面规定了xml文档的书写规则。
这个说明文档也叫约束文档。
故学习约束只需要读懂框架提供的约束文档即可。
约束主要分为:
- DTD:简单的约束技术。
- Schema:一种复杂的约束技术。
DTD约束技术使用方式:
使用前要先引入dtd文档到xml文档中:
dtd
<!- 这个代表根标签名为student,并且子标签student必须出现0次及以上,这个是正则表达式用法 -->
<!ELEMENT students (student*) >
<!- 这个代表student子标签里面必须出现name,age,sex子标签,且必须按照这个顺序出现-->
<!ELEMENT students (name,age,sex) >
<!- 这个代表name子标签-->
<!ELEMENT name (#PCDATA)>
<!- 这个代表age子标签-->
<!ELEMENT age (#PCDATA)>
<!- 这个代表sex子标签-->
<!ELEMENT sex (#PCDATA)>
<!- 这个代表student子标签里面的属性ID叫number-->
<!ATTLIST student number ID #REQUIRED>
dtd的两种格式:
-
内部dtd:将约束规则定义在xml文档中。(不常用)
xml<?xml version='1.0'?> <!DOCTYPE students[ <!ELEMENT students (student*) > <!ELEMENT student (name,age,sex) > <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST student number ID #REQUIRED> ]> <students> <student number="s001"> <name>zhangsan</name> <age>13</age> <sex>male</sex> </student> <student number="s002"> <name>zhangsan</name> <age>13</age> <sex>male</sex> </student> </students>
-
外部dtd:将约束规则定义在外部的dtd文件中。
外部dtd根据所处位置不同分为两种引用方式。
-
本地:
<!DOCTYPE 根标签名 SYSTEM "dtd文件位置">
xml<?xml version='1.0'?> <!DOCTYPE students SYSTEM "student.dtd"> <students> <student number="s001"> <name>zhangsan</name> <age>13</age> <sex>male</sex> </student> <student number="s002"> <name>zhangsan</name> <age>13</age> <sex>male</sex> </student> </students>
-
网络
<!DOCTYPE 根标签名 PUBLIC "dtd文件名" "dtd文件的url位置"
-
Schema约束技术
dtd约束技术对标签的内容无法做到限定,比如说age不能给他限定到0到100,只能随意。
所以通过schema约束技术对标签内容进行限定。
Schema本质是一个xml文件但是它的文件的后缀是xsd
引入xsd文件的方式
xml
<!- 1.填写xml文件的根元素
2.引入xsi前缀(固定格式)xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3.引入xsd文件的命名空间xsi:schemaLocation="http://www.normaling.cn/xml student.xsd
这个引用后,我们以后要使用student.xsd里面的元素必须写成
http://www.normaling.cn/xml:student.xsd里面的元素
即,前缀名http://www.normaling.cn/xml
4.为每一个xsd约束声明一个前缀,作为标识
因为第三步前缀名太长不方便阅读,通过第四步来简化代表
xmlns:前缀名="http://www.normaling.cn/xml"
这样以后使用student.xsd里面的内容只需要使用我们自定义的前缀名来代替这个
如果没写自定义前缀名,直接写成xmln="http://www.normaling.cn/xml"就代表默认前缀,可不写前缀名
前缀的作用是当我们在第三步中引入了多个schema文档的时候,会出现一样的标签名,用来区分标签名使用的
-->
举例:
xml
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.normaling.cn/xml1 student.xsd
http://www.normaling.cn/xml2 student2.xsd"
xmlns:a="http://www.normaling.cn/xml1"
xmlns:b="http://www.normaling.cn/xml2"
>
schema框架会给出,不需要知道如何怎么写xsd文件,看懂即可.