概述
可扩展标记语言(Extensible Markup Language)
XML 的设计宗旨是传输,存储数据,而非显示数据
XML 标签没有被预定义。您需要自行定义标签
作用
- 两个程序间进行数据通信(跨语言传输数据)
- 给一台服务器,做一个配置文件,当服务器程序启动时,去读取它应当监听的端口号
XML常见应用
-
XML的出现解决了程序间数据传输的问题:
比如QQ之间的数据传送,用XML格式来传送数据,具有良好的可读性,可维护性 -
XML可以做配置文件
XML文件做配置文件可以说非常普遍,比如我们的Tomcat服务器的server.xml,web.xml。再比如我们的structs中的structs-config.xml文件,和hibernate的hibernate.cfg.xml等等。 -
XML可以充当小型的数据库
XML文件可以做小型数据库,也是不错的选择,我们程序中可能用到一些经常要人工配置的数据,如果放在数据库中读取不合适(因为这会增加维护数据库的工作),则可以考虑直接用XML来做小型数据库。这种方式直接读取文件显然要比读数据库快。比如msn中保存用户聊天记录就是用XML文件。
XML 与 HTML的主要差异
- XML 和 HTML 为不同的目的而设计
- XML 被设计为存储数据,其焦点是数据的内容
- HTML 被设计用来显示数据,其焦点是数据的外观
特点
- 能对各种编程语言编写的数据进行管理,使得在任何平台下都能通过解析器来读取XML数据
- 跨语言数据传递
案例
用xml记录信息
<?xml version="1.0" encoding="gb2312"?>
<class>
<stu id="001">
<name>杨过</name>
<sex>男</sex>
<age>20</age>
</stu>
<stu id="002">
<name>小龙女</name>
<sex>女</sex>
<age>21</age>
</stu>
</class>
DTD约束xml
由于xml的标签由用户自己定义,因此在开发的时候,每个人都可以根据自己的需求来定义xml标签,这样导致项目中的xml难以维护,因此需要使用一定的规范机制来约束xml文件中的标签书写。
<?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT users (user+) >
<!ELEMENT user (name,age,addr) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
引入
外部DTD的引入方式外部DTD主要指的一个独立的DTD文件。
首先要书写DTD文件,然后在要被约束的xml文件中引入。
<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
- 文档根结点 指的是当前xml中的根标签。
- SYSTEM 引入的系统中存在文件
- “DTD文件的URL” DTD存放的位置
引入公共的DTD
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
- 文档根结点 指的是当前xml中的根标签
- PUBLIC 表示当前引入的DTD是公共的DTD
在xml中直接书写DTD
<!DOCTYPE 根标签名 [
具体的标签的约束
]>
示例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users[
<!ELEMENT users (user+) >
<!ELEMENT user (name,age,addr) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA) >
<!ELEMENT addr (#PCDATA) >
]>
<users>
<user>
<name>zhangsan</name>
<age>23</age>
<addr>shanghai</addr>
</user>
<user>
<name>lisi</name>
<age>24</age>
<addr>beijing</addr>
</user>
</users>