SAX编程技术.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:19 大小:254KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

SAX编程技术.doc

SAX编程技术.doc

预览

免费试读已结束,剩余 9 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

天博培训机构Http://www.px1987.comSAX编程技术1、概述SAXAPI(SimpleAPIforXML),它是由一组接口和类构成的。在运行中的各方面表现都优于DOMAPI,但SAX用起来不像DOM那样直观。SAX它并不是由W3C官方所提出的标准,可以说是"民间"的事实标准。实际上,它是一种社区性质的讨论产物。虽然如此,在XML中对SAX的应用丝毫不比DOM少,几乎所有的XML解析器都会支持它。SAX解释器,可以说是一个把具体操作留给编程人员而把解释工作留给自己的一个编程模型。它并没有象DOM那样把整个XML文档加载到内存而是逐行解释然后通过事件通知给程序,由具体的程序使用这些事件通知,最后加以处理。2、SAX和DOMAPI(1)SAX的实现机制SAXAPI是基于事件驱动的(而DOM是文档驱动),它很类似于标签库的处理机制,在标签开始,标签结束以及错误发生等等地方调用相应的接口实现方法。与DOM比较而言,SAX是一种轻量型的方法。实现了SAXAPI的XML解析器跟据解析到的XML文档的不同特征产生事件。通过在Java代码中捕捉这些事件,就可以写出由XML数据驱动的程序(有些类似于AWT中的事件驱动机制,通过事件驱动来识别XML文档的内容)。由于SAXAPI是基于事件驱动的,SAX是顺序的,层次化的分析XML文档,着眼于当前的事件连续的处理,不是全部文档都读入内存,因此它并不需要读入整个文档。而文档的读入过程也就是SAX的解析过程(读入文档的过程和解析的过程是同时进行的),这和DOM区别很大。解析开始之前,需要向XMLReader注册一个ContentHandler,也就是相当于一个事件监听器,在ContentHandler中定义了很多方法,比如startDocument(),它定制了当在解析过程中,遇到文档开始时应该处理的事件。当XMLReader读到合适的内容,就会抛出相应的事件,并把这个事件的处理权代理给ContentHandler,调用其相应的方法进行响应。(2)SAX解析过程的说明:以下面的XML文档为例<POEM><AUTHOR>OgdenNash</AUTHOR><TITLE>Fleas</TITLE><LINE>Adam</LINE></POEM>当XMLReader读到<POEM>标签时,就会调用ContentHandler.startElement()方法,并把标签名POEM作为参数传递过去。在你实现的startElement()方法中需要做相应的动作,以处理当<POEM>出现时应该做的事情各个事件随着解析的过程(也就是文档读入的过程)一个个顺序的被抛出,相应的方法也会被顺序的调用,最后,当解析完成,方法都被调用后,对文档的处理也就完成了。下面的这个表,列出了在解析上面的那个XML文件的时候,顺序被调用的方法:遇到的项目方法回调{文档开始}startDocument()<POEM>startElement(null,"POEM",null,{Attributes})""characters("<POEM>...",6,1)<AUTHOR>startElement(null,"AUTHOR",null,{Attributes})"OgdenNash"characters("<POEM>...",15,10)</AUTHOR>endElement(null,"AUTHOR",null)""characters("<POEM>...",34,1)<TITLE>startElement(null,"TITLE",null,{Attributes})"Fleas"characters("<POEM>...",42,5)</TITLE>endElement(null,"TITLE",null)""characters("<POEM>...",55,1)<LINE>startElement(null,"LINE",null,{Attributes})"Adam"characters("<POEM>...",62,4)</LINE>endElement(null,"LINE",null)""characters("<POEM>...",67,1)</POEM>endElement(null,"POEM",null){文档结束}endDocument()(3)SAX的不足要注意的是SAX中一个重要的特点就是它的流式处理,在遇到一个标签的时候,它并不会纪录下以前所碰到的标签,也就是说,在startElement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不得而知的,都需要你