Posted on 2005-02-24 22:13
laogao 閱讀(279)
評論(0) 編輯 收藏 所屬分類:
On Java
在前面的筆記中,我們曾經提到讀取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的實現和使用都很直截了當,就是處理一個個事件罷了。