概述
SAX是基于事件解析XML文档的代表性技术。SAX通过扫描XML文档的内容,对元素,属性和文本数据内容等逐一分析和处理。
1.XML基于时间的解析模式
基于事件的解析是指XML处理程序线性描述一个XML文档,当XML处理出鞥许从文档的开头至结尾读取XML文档的过程中,逐一分析和处理遇到的元素、属性和字符数据等。
【例子1】奥运金牌榜XML文件:
<?xml version = "1.0" encoding = "UTF-8"?>
<?xml-stylesheet type="application/xml" href = "priority.xsl"?>
<olympic>
<olympic_games>
<year>2008</year>
<city>Beijing</city>
<country>China</country>
<medal_standings>
<country code = "CHN">
<name>China</name>
<rank>1</rank>
<gold>51<gold>
</country>
<country code = "USA">
<name>United States</name>
<rank>2</rank>
<gold>36<gold>
<country>
<country code = "RUS">
<name>Russia</name>
<rank>3</rank>
<gold>23</gold>
<country>
</medal_standings>
</olympic_games>
<olympic>
上面例子是一个普通的xml文档,包含了元素、元素的属性、子元素和元素文本内容、处理指令等主要组成部分。当暂时不考虑属性和指令,XML处理程序将依次按照元素的起始和结束标签等判断元素的编辑范围以及元素内容,并且能够判断元素的层次关系,最终向应用程序报告当前这个你在处理的内容。一个简单的基于事件处理的XML处理程序解析例子,能够得到如下解析结果:
Start Document
Start Element: olympic
Characters:
Start Element:year
Characters:2008
End Element:year
Characters:
Start Element:city
Characters:Beijing
End Element:city
Characters:
Start Element:country
Characters:China
End Element:country
Characters:
Start Element: medal_standings
Characters:
Start Element: country
Characters:
Start Element: name
Characters: China
End Element: name
Characters:
Start Element: rank
Characters: 1
End Element:rank
Characters:
Start Element: gold
Characters: 51
End Element: gold
Characters:
End Element: country
Characters:
Start Element: Country
Characters:
Start Element: name
Characters: United States
End Element: name
Characters:
Start Element: rank
Characters: 2
End Element:rank
Characters:
Start Element: gold
Characters: 36
End Element: gold
Characters:
End Element: country
Characters:
Start Element: country
Characters:
Start Element: name
Characters: Russia
End Element: name
Characters:
Start Element: rank
Characters: 3
End Element:rank
Characters:
Start Element: gold
Characters: 3
End Element:gold
Characters:
End Element: country
Characters:
Start Element: medal_standings
Characters:
Start Element: olympic_games
Characters:
Start Element: olympic
End Document
以上是对例子的一个简单的解析过程,整个过程以XML文档的开始和结尾作为起点和终点。处理过程中的事件包括了文档开始、文档结束、元素开始、元素结束、元素的文本内容等。由于XML处理程序是按照从XML文档中的读取的数据单元进行解析,而不是先进行对XML文档做整体分析,因此及时XML文档不符合形式良好的要求,XML处理程序页并不能事先发现这些错误,知识当正在处理的数据片段与先前已经处理完成的部分发生冲突时,比如结束标签缺失或标签嵌套错误,才会停止解析并报告错误。处理速度和效率是基于事件的解析方式的一大优势,尤其是对于体积庞大的大兴XML文档,由于不需要把大量文档中的数据加载到内容,从资源利用的角度看,效率也是比较高的。从另外一个角度看,基于事件的XML解析过程由于需要暂存每一次处理步骤的状态,由于分析XML文档是否满足形式良好的要求和其他有效性约束条件,应用程序必须能够处理随时可能发生的错误,因此对于基于事件的处理方式来说,处理过程相对比较复杂。
(详细内容见《XML简明教程》——张欣毅,著)