预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共39页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

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

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

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

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

第七章SAX解析XML文档SAX简介SAX概述SAX的工作机制【重点掌握】 大多数的SAX都会实现以下几种类型的事件 在文档的开始和结束时触发文档处理事件 在文档内每一个XML元素都在接受解析的前后触发元素事件。任何元数据通常都是由单独的事件交付。这是我们最关心的事件。通常,SAX解析器会向应用程序提供包含元素信息的事件参数,在最低程度上也会提供元素的名字。 在处理文档的DTD或Schema时产生DTD或Schema事件 错误事件用来通知主机应用程序解析错误SAX解析 器调用处 理器方法SAX监听器【重点掌握】voidignorableWhitesapce(char[]ch,intstart,intlength):SAX解析器处理元素内容中可忽略的空白时触发该方法 voidskippedEntity(Stringname):SAX解析器跳过实体时触发该方法 voidstartDocument():SAX解析器开始处理文档时触发该方法 voidstartElement(Stringuri,StringlocalName,StringqName,Attributesatts):SAX解析器开始处理元素时触发该方法 voidstartPrefixMapping(Stringprefix,Stringuri):SAX解析器开始处理元素里命名空间属性(即xmlns:prefix属性)时触发该方法 SAX解析器【重点掌握】提问:为何XMLReader在调用时不需要传入SAX解析时间的监听器呢?SAX解析不是总是基于事件机制的吗?答: XMLReader是SAX规范定义的解析器接口,ContentHander、 DTDHandler、EntityResolver和ErrorHandler也是SAX规范定义的监 听器器接口。他们通常结合在一起用。 SAXParse是JAXP对XMLReader的进一步包装,使用SAXParse 可以进步一简化SAX解析编程,而DefaultHandler则是上面四种监听 器的实现类,用于简化监听器编程。 所以,我们通常选择SAXParse+DefaultHandler来解析XML文档。 除非开发者非常喜欢原生的SAX解析,或者考虑到某些原生的特性 才会选用XMLReaderSAX对象的创建及调用【重点掌握】SAX解析XML文档SAX应用基于事件委托处理模式处理文件开始和结束classMyHandlerextendsDefaultHandler{ Filefile; longstarttime,endtime; publicMyHandler(Filef){file=f;} publicvoidstartDocument(){ starttime=System.currentTimeMillis(); System.out.println("文件所在的路径是"+file.getAbsolutePath()); System.out.println("文件名为"+file.getName()); System.out.println("开始解析XML文件----------"); } publicvoidendDocument(){ System.out.println("解析XML文件结束----------"); endtime=System.currentTimeMillis(); System.out.println("文件解析共花费"+(endtime-starttime)+"秒"); }} SAX解析器部分处理开始和结束标记【重点掌握】classMyHandlerextendsDefaultHandler{ intcount=0;Stringstr=null; publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesatts){ count++; if(uri.length()>0){str=uri;System.out.println(str);} System.out.print("<"+qName+""); for(intk=0;k<atts.getLength();k++){//获得该标记的属性,并输出属性名称和值。 System.out.print(atts.getLocalName(k)+"="); System.out.print("\""+atts.getValue(k)+"\""); } System.out.println(">"); } publicvoidendElement(Stringuri,StringlocalName,Str