SAX 解析 xml

该文章用公司技术分享,简单介绍,没有深入,期望javaeye们给与意见

XML即扩展标志性语言,随着软件体系的不断的成长与发展,XML的使用已经超出了原先的设想,并由很多开源组织编写大量的规范,进一步扩大它的使用范围。

作为程序员阅读XML之余,理解XML解析,也往往也会遇到解析自定义XML文件的情况,而解析XML也因情况使用不同的方式,以下介绍2种方式。

第一种:
自然是大家再熟悉不过的DOM树形式,一次性把XML文件读入内存,形成完整的DOM树。
好处:容易理解的,开源api容易上手(例如:dom4j,jdom...)
坏处:需要一次读入内存,处理大容量xml会出现内存溢出

第二种:
SAX,以流的方式处理XML,以缓存的方式陆续读取XML文件,event-base方式进行解析
好处:基于流的方式,内存开销小,仅需要一定的缓存空间,event-base方式非常适合消息通信时,解析消息
坏处:event-base,可读性较差,开发难度上升,不容易形成完整的DOM结构

以下以一个sample来介绍SAX的简单使用,在sample前我进行几个API的简单介绍
首先是 org 定义的sax的几个基础handler,每个handler都包含了对应不同事件的处理方法,通过复写这些方法即可自定义XML解析

org.xml.sax.ContentHandler //主要解析XML的API均包含在ContentHandler中
org.xml.sax.EntityResolver
org.xml.sax.DTDHandler
org.xml.sax.ErrorHandler

这些Handler提供的API即event-base的应对,替代了较早的org.xml.sax.DocumentHandler的作用,分工更细结构更清晰,详细可以参照jdk的注释

org.xml.sax.helpers.DefaultHandler
implements
EntityResolver,
DTDHandler,
ContentHandler,
ErrorHandler

是一个defaultHandler,适配了所有的事件应对接口,所以我们只需要复写defaultHandler的方法,

SAXParser parser = saxFactory.newSAXParser();

并使用复写过的handler解析XML
          
parser.parse(inputSource , overwriteDefaultHandler );

以下是parse的API注释
 
/**
* Parse the content given [email={@link]{@link[/email] org.xml.sax.InputSource} as XML using the specified
* @param is The InputSource containing the content to be parsed.
* @param dh The SAX DefaultHandler to use.
*/
public void parse(InputSource is, DefaultHandler dh)



以下附上
XML文件student.xml
SaxTest.java
见附件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值