深入浅出XML:从基础到约束
XML(Extensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的通用文本格式。它的标签没有预定义,用户可根据需求自定义,实现对数据层级关系的清晰描述。
主要用途:
存储数据:例如省市区三级结构;
在Java生态中,常用作框架配置文件:
Spring:
applicationContext.xml
MyBatis:
mybatis-config.xml
Log4j2:
log4j2.xml
数据传输:服务端与客户端交换数据,JSON是目前最主流的传输格式。
当前XML标准版本:1.0
二、XML文档的基本组成
1. 文档声明(可选)
<?xml version="1.0" encoding="UTF-8"?>
必须放在文件首行;
属性说明:
version
:XML版本,当前为1.0;encoding
:字符编码,一般使用UTF-8;
2. 元素(Element)
又称标签,每个XML文件必须有唯一的根元素;
由开始标签、内容、结束标签组成,支持嵌套,但必须遵循层级关系;
命名规范:
不能以数字开头;
不能使用"XML"(不区分大小写);
不能包含空格或冒号;
区分大小写;
<users>
<user>
<id>10001</id>
<name>sangui</name>
<password>333</password>
</user>
<user>
<id>10002</id>
<name>Jack</name>
<password>abc</password>
</user>
</users>
3. 属性(Attribute)
定义在开始标签内;
格式:
属性名="属性值"
;同一元素不能有重复属性名;
属性命名同样遵守元素命名规范;
<user id="10001" country="China" source="Android">
<!-- ... -->
</user>
4. 注释(Comment)
格式:
<!-- 这里是注释 -->
IDEA快捷键:
Ctrl + Shift + /
(Windows)
5. 转义字符(Entity)
用于表示特殊字符:
>
→&
<
→<
<salary>salary > 1000 & salary < 3000</salary>
6. 字符区(CDATA)
将复杂文本(如含
<
、&
等)包裹在CDATA中,防止解析错误;格式:
<![CDATA[
salary > 1000 & salary < 3000
]]>
提示:在MyBatis的Mapper XML中书写SQL语句时,可用CDATA来处理特殊符号。
7. 完整示例
<?xml version="1.0" encoding="UTF-8"?>
<!-- 根元素:users -->
<users>
<user id="10001" country="China" source="Android">
<id>10001</id>
<name>sangui</name>
<password>333</password>
<salary>salary > 1000 & salary < 3000</salary>
</user>
<user id="10002" country="US" source="iOS">
<id>10002</id>
<name>Jack</name>
<password>abc</password>
<salary>
<![CDATA[
salary > 1000 & salary < 3000
]]>
</salary>
</user>
</users>
三、XML约束(Validation)
XML本身不强制标签与属性规范化,需要借助约束来定义文档结构和数据类型。主要有两种约束方式:
DTD(Document Type Definition,文件后缀
.dtd
)XSD(XML Schema Definition,文件后缀
.xsd
)
1. DTD 约束
定义元素层级、属性类型及约束;
简单易用,但类型限制较弱;
示例 DTD 定义
<!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|iOS|PC|WeChat) "Android"
>
DTD 引用方式
<!-- 外部本地 -->
<!DOCTYPE users SYSTEM "user.dtd">
<!-- 外部公共 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 内部 DTD -->
<!DOCTYPE users [
<!-- 在此定义 DTD -->
]>
2. XSD 约束
基于XML的Schema语言,可定义复杂类型、数据类型、更灵活的出现次数;
广泛应用于Spring、WebService等场景。
示例 XSD 定义
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.sangui.top"
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 name="address" type="xs:string"/>
<xs:element name="bookTime" type="xs:dateTime"/>
<xs:element name="amount" type="xs:double"/>
</xs:sequence>
<xs:attribute name="orderId" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XSD 引用方式
<orders xmlns="https://www.sangui.top"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.sangui.top order.xsd">
<!-- ... -->
</orders>
- 微信
- 赶快加我聊天吧
- 赶快加我聊天吧