简介
可扩展标记语言,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
