在前面的笔记中,我们曾经提到读取XML数据的两种截然不同的方式,SAX就是其中一种。来看一段代码:
/**//* * Created on 2005-2-24 * All rights reserved. * */package sean.home.test;import java.io.File;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;/**//** * @author Sean GAO * <p> * gaoyuxiang@gmail.com * </p> * */public class Main { public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); DefaultHandler myHandler = new DefaultHandler() { public void startDocument() throws SAXException { System.out.println("XML document starts "); } public void endDocument() throws SAXException { System.out.println("XML document ends "); } public void startElement(String uri, String localName, String qualifiedName, Attributes attributes) throws SAXException { System.out.println("element " + qualifiedName + "starts "); } public void endElement(String uri, String localName, String qualifiedName) throws SAXException { System.out.println("element " + qualifiedName + "ends "); } public void characters(char[] ch, int start, int length) { System.out.println(new String(ch, start, length)); } }; parser.parse(new File(args[0]), myHandler); }}在这段代码中,我们通过SAXParserFactory获取一个parser,然后自定义一个Handler去处理由SAX读取XML文件时触发的事件,如startDocument表示文档开始,endElement表示元素读取结束,characters表示在元素体内读到内容等等。这里我为了方便直接写成匿名内部类了,Exception也没有做任何处理,这在实际中通常是不合理的。
基本上SAX的实现和使用都很直截了当,就是处理一个个事件罢了。