XML
Introduction to XML
XML – Extensible Markup Language,即可扩展标记语言。
XML 特点:可扩展的,标签都是自定义的;语法十分严格。
Functions of XML
存储数据:通常,我们在数据库中存储数据。不过,如果希望数据的可移植性更强,我们可以把数据存储 XML 文件中。
配置文件:更多是作为各种技术框架的配置文件使用。
在网络中传输:客户端可以使用 XML 格式向服务器端发送数据,服务器接对 XML 格式数据进行解析。
想了解更多,欢迎关注我的微信公众号:Renda_Zhang
XML Syntax
XML 文档声明格式
文档声明必须为结束且必须写在第一行。
versioin
:指定 XML 文档版本,是必需属性,因为不会选择 1.1,只会选择 1.0。
encoding
:指定当前文档的编码,是可选属性,默认值是 utf-8
。
<?xml version="1.0" encoding="UTF-8"?>
元素
Element 元素:是 XML 文档中最重要的组成部分。
命名规则:
- 不能使用空格,不能使用冒号
- XML 标签名称区分大小写
- XML 必须有且只有一个根元素
XML 必须有且只有一个根元素,它是所有其他元素的父元素,比如以下 users 就是根元素。
<?xml version="1.0" encoding="utf-8" ?>
<users>
</users>
普通元素的结构开始标签、元素体、结束标签组成。
<hello>大家好</hello>
元素体:元素体可以是元素,也可以是文本。
<hello>
<a>您好</a>
</hello>
空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭合。
<close/>
属性
- 属性是元素的一部分,它必须出现在元素的开始标签中。
- 属性的定义格式:属性名 = “属性值”,其中属性值必须使用单引或双引。
- 一个元素可以有 0 ~ N 个属性,但一个元素中不能出现同名属性。
- 属性名不能使用空格、冒号等特殊字符,且必须以字母开头。
<bean id="1" class="x"></bean>
注释
XML 的注释,以 <!--
开始,以 -->
结束,注释内容会被XML解析器忽略。
使用 XML 描述数据
<?xml version="1.0" encoding="UTF-8" ?>
<employees>
<employee eid="2">
<ename>林黛玉</ename>
<age>20</age>
<sex>女</sex>
<salary>5000</salary>
<empdate>2019-03-14</empdate>
</employee>
<employee eid="3">
<ename>杜甫</ename>
<age>40</age>
<sex>男</sex>
<salary>15000</salary>
<empdate>2010-01-01</empdate>
</employee>
</employees>
XML Constraints
在 XML 技术里,可以编写一个文档来约束一个 XML 文档的书写规范,这称之为 XML 约束。
常见的 XML 约束:DTD,Schema。
“用户程序员”阅读 XML 约束文档,编写 XML 文档;软件框架编写 XML 约束文档,解析 XML 文档;XML 约束文档规定了 XML 文档的书写规则。
DTD Constraint
DTD - Document Type Definition,文档类型定义,用来约束 XML 文档。规定 XML 文档中元素的名称,子元素的名称及顺序,元素的属性等。
通过框架提供的 DTD 约束文档,编写对应的 XML 文档。常见框架使用 DTD 约束有:Struts2、hibernate 等。
引入 DTD 文档到 XML 文档中有两种方式:
-
内部 DTD – 将约束规则定义在 XML 文档中。
-
外部 DTD – 将约束的规则定义在外部的 DTD 文件中。
创建约束文件 student.dtd
<!ELEMENT students (student+) >
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
<!--
ELEMENT: 用来定义元素
students (student+) : 代表根元素 必须是 <students>
student+ : 根标签中至少有一个 student子元素, + 代表至少一个
student (name,age,sex): student 标签中包含的子元素,按顺序出现
#PCDATA: 是普通文本内容
ATTLIST: 用来定义属性
student number ID #REQUIRED
student子元素中 有一个ID属性叫做 number,是必须填写的
ID: 唯一 值只能是字母或者下划线开头
-->
引入约束文档到 student.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
<student number="s1">
<name>布莱尔</name>
<age>22</age>
<sex>男</sex>
</student>
<student number="s2">
<name>张人大</name>
<age>55</age>
<sex>男</sex>
</student>
</students>
Schema Constraint
Schema 是新的 XML 文档约束,比 DTD 强大很多,是 DTD 替代品。
Schema 本身也是 XML 文档,但 Schema 文档的扩展名为 xsd
,而不是 xml
。
Schema 功能更强大,内置多种简单和复杂的数据类型。
Schema 支持命名空间(一个 XML 中可以引入多个约束文档)。
命名空间:指的是一个环境,所用的标签来自于哪个环境定义的。
创建 student.xsd
xmlns
– 表示此文档默认的命名空间是什么
xmlns:xsd
– 表示数据类型等定义的来源
targetNamespace
– 表示文档中要定义的元素来自哪个命名空间
elementFormDefault
– 表示要求 XML 文件的每一个元素都要有命名空间指定
<?xml version="1.0"?>
<xsd:schema xmlns="http://www.xxx.com/xml"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.xxx.com/xml"
elementFormDefault="qualified">
<xsd:element name="students" type="studentsType"/>
<xsd:complexType name="studentsType">
<xsd:sequence>
<xsd:element name="student" type="studentType" minOccurs="0"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="studentType">
<xsd:sequence>
<xsd:element