XML
XML
- XML 指的是可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是
传输数据
,而不是显示数据- XML 标签没有被预定义。您需要自行定义标签
- XML 被设计为具有自我描述性
- XML 是
W3C
的推荐标准
HTML与XML
- XML 不是 HTML 的替代
- XML 和 HTML 为不同的目的而设计
- XML 被设计是为
传输
和存储数据
,其焦点是在数据的内容- HTML 被设计的是用来显示数据,其焦点是
数据的外观
- HTML 旨在显示信息,而 XML 旨在传输信息
- HTML 语法比较松散,XML 语法是严格的
- HTML 所有标签都是预先定义好的,使用固定的标签,展示不同的内容
- XML 当中的标签都是自己定义的
- XML用处
- 1.数据存储
- 2.配置文件
- 3.数据传输
XML基本语法
我使用的开发工具是 IntelliJ IDEA 创建一个普通的 Java 工程就行,创建一个以 .xml
结尾的文件。
文档声明
- 必须写在文档的第一行
关于文档声明第一行标签中的属性介绍:
- version:版本号,固定
1.0
- encoding:指定文档的编码表,默认
iso-8859-1
- standalone:指定文档声明是否独立 yes 或 no,是否可以引用其它文件的意思
编写规则
- 所有 XML 元素都必须有关闭标签
- XML 标签对大小写敏感
- XML 必须正确地嵌套
- XML 文档必须有根元素
- XML 的属性值必须加引号
<?xml version="1.0" encoding="UTF-8" ?>
<book>
<authon>BNTang</authon>
<price>6666</price>
</book>
🐤实体引用
在 XML 中,有一些字符拥有特殊的意义,如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。这样会产生 XML 错误,为了避免这个错误,请用实体引用
来代替 "<" 字符。
5 个预先定义好的实体引用符:
- < 小于 <
- > 大于 >
- & 和号 &
- ' 单引号 '
- " 引号 "
<?xml version="1.0" encoding="UTF-8" ?>
<book>
<authon>BNTang ></authon>
<price>6666</price>
</book>
命名规则
- 名称可以包含字母,数字以及其他字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符
xml
做标签名称- 名称不能包含空格
其他的我就不校验了,自行测试即可,比较简单,有时候你不想里面的内容被解析,不需要转义,里面的数据原样显示,这个时候就可以使用 <![CDATA[数据内容]]>
标签来实现。
<?xml version="1.0" encoding="UTF-8" ?>
<book>
<authon>BNTang</authon>
<price>6666</price>
<![CDATA[
Hello BNTang
]]>
</book>
关于属性的声明,属性值必须使用引号引起,单引号双引号都行:
<?xml version="1.0" encoding="UTF-8" ?>
<team>
<person id="1001">
<name>BNTang</name>
<gender>男</gender>
</person>
<person id="1002">
<name>IT6666</name>
<gender>女</gender>
</person>
</team>
在浏览器页面显示的效果如下:
XML约束
- 规定文档当中只能写哪些标签。并且会给一些提示
约束分类
DTD约束
- 内部 DTD:在 xml 当中定义的 dtd
- 外部 dtd:在外部文件当中单独定义的 dtd
如果是自己定义的 DTD 文件是以 .dtd
结尾的,下面我给出了一个示例如下:
本地:<!DOCTYPE 名称 SYSTEM "student.dtd">
<!DOCTYPE student SYSTEM "student.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>
- 引入之后你会发现语法已经严格的规定好了,不能乱写了
- 如下我在给出一个
Servlet
的 DTD 供参考用:
<!ELEMENT web-app (servlet*,servlet-mapping*,wel-file-list?)>
<!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT wel-file-list (welcome-file+)>
网络上的约束:<!DOCTYPE students PUBLIC "命名空间" "student.dtd">
- 网上约束和本地差不多只是约束文件的地址不一样而已
约束语法
存在的问题
- 在标签当中存放的内容不知道是什么类型,写的都是汉字,这种约束不严谨
schema约束
- 复杂标签:标签当中还有子标签
- 简单标签:标签当中没有子标签了
约束语法
- type:起的别名
- complexType name="students" sequence element name="" minOccur 相当于 dtd 的 *
- simpleTyle restriction base="xsd:string" 限制简单标签当中的数据类型
student.xsd
内容如下:
<?xml version="1.0"?>
<xsd:schema xmlns="http://www.it6666.top/xml"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.it6666.top/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 name="name" type="xsd:string"/>
<xsd:element name="age" type="ageType"/>
<xsd:element name="sex" type="sexType"/>
</xsd:sequence>
<xsd:attribute name="number" type="numberType" use="required"/>
</xsd:complexType>
<xsd:simpleType name="sexType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="male"/>
<xsd:enumeration value="female"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ageType">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="256"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="numberType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="it_\d{4}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
schema约束分析
使用过程
- 编写根标签
- 引用约束地址如:xsi:schemaLocation = "默认空间,约束地址.xsd"
- 引用实例名称空间:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 默认名称空间:xmlns="http://www.it6666.top/xml"
- 如下:
<?xml version="1.0" encoding="UTF-8"?>
<students xsi:schemaLocation="http://www.it6666.top/xml student.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.it6666.top/xml">
<student number="it_0001">
<name>aa</name>
<age>50</age>
<sex>male</sex>
</student>
</students>