简介

可扩展标记语言,eXtensible Markup Language
被设计用来传输和存储数据,HTML 被设计用来显示数据
可以自行定义标签,且被设计为具有自我描述性
独立于软件和硬件的信息传输工具

文档定义

XML文档定义分为DTD和Schema两种形式,二者都是对XML语法的约束
本质区别在于Schema本身也是一个XML文件,可以被XML解析器解析,可以为XML承载的数据定义类型,约束能力较之DTD更强大
对XML的解析主要有DOM(文档对象模型,Document Object Model)、SAX(Simple API for XML)和StAX(Java6引入的新方式,Streaming API for XML)
DOM处理大型文件时性能下降十分厉害,是由DOM树结构占用的内存较多造成的。 而且DOM解析方式必须在解析文件之前把整个文档装入内存,适合对XML的随机访问(典型的用空间换取时间的策略)
SAX是事件驱动型的XML解析方式,顺序读取XML文件,不需要一次全部装载整个文件。当遇到文件开头,文档结束,或者标签开头与标签结束时,会触发一个事件,通过事件回调代码来处理XML文件,适合对XML的顺序访问
StAX把重点放在流上,实际上StAX与其他解析方式的本质区别就在于应用程序能够把XML作为一个事件流来处理。将XML作为一组事件来处理的想法并不新颖(SAX就是这样做的),但不同之处在于StAX允许应用程序代码把这些事件逐个拉出来,而不用提供在解析器方便时从解析器中接收事件的处理程序

作用

数据交换和信息配置

做数据交换时,XML将数据用标签组装成起来,然后压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再从XML文件中还原相关信息进行处理
XML曾经是异构系统间交换数据的标准,但此项功能几乎已经被JSON取而代之
当然,目前很多软件仍然使用XML来存储配置信息,通常也会将作为配置信息的硬代码写在XML文件中,Java的很多框架也是这么做的
而且这些框架都选择了dom4j作为处理XML的工具,因为Sun公司的官方API实在不怎么好用
现在有很多时髦的软件(如Sublime)已经开始将配置文件书写成JSON格式,我们已经强烈的感受到XML的另一项功能也将逐渐被业界抛弃

自我描述

标签本身包含一定的意义

语法规则

XML文档必须有根元素
所有的XML元素必须有一个关闭标签
XML标签对大小写敏感
XML属性必须正确嵌套
XML属性值必须加引号
XML中空格会被保留
进行注释
XML以LF存储换行

实体引用

<-< >-> &-& '-‘ "-“

XML元素

XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分
XML元素是可扩展的
XML的优势之一,就是可以在不中断应用程序的情况下进行扩展

XML属性

属性(Attribute)提供有关元素的额外信息
元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素

XML验证

拥有正确语法的 XML 被称为”形式良好”的 XML
通过 DTD 验证的XML是”合法”的 XML
DTD 的目的是定义 XML 文档的结构。它使用一系列合法元素来定义文档结构
W3C 支持一种基于 XML 的 DTD 代替者,它名为 XML Schema