[XML学习笔记][3.1]通过JAXP使用SAX

类别:Java 点击:0 评论:0 推荐:
 
在前面的笔记中,我们曾经提到读取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>
 *         [email protected]
 *         </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的实现和使用都很直截了当,就是处理一个个事件罢了。

本文地址:http://com.8s8s.com/it/it11186.htm