如果文档很大,使用DOM会显得效率低下:
此时应该使用流机制解析器(streaming parser):
比较古老的SAX和javaSE6添加的StAX解析器
1、SAX解析器
使用事件回调(event callback),在解析XML输入的组成部分时会报告事件,但不会以任何方式存储文档
而是由事件处理器建立相应的数据结构。DOM就是基于SAX解析器的基础上建立的,它在接收到解析器事件时建立
DOM树。
ContentHandler接口中几个重要的回调方法:
startElement,endElement
characters
startDocument、endDocument
得到SAX解析器,代码如下:
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
parser.parse(source,handle);
其中source可以是一个文件,一个URL字符串或者一个输入流,handler属于一个DefaultHandler的一个子类
DefaultHandler类为四个结构定义了空的方法:
ContentHandler
DTDHandler
EntityHandler
ErrorHandler
2、StAX解析器
提供了解析事件的迭代器,是一种"拉解析器(pull parser),与安装事件处理器不同,使用以下基本循环即可迭代所以事件
InputStream in=url.openStream();
XMLInputFactory factory=XMLInputFactory.newInstance();
XMLStreamReader parser=factory.createXMLStreamReader(in);
while(parser.hasNext()){
in event=parser.next();
Call parser methods to obtain details
}