SAX:Simple API for XML
一个入门小例子:
package com.ly.sax;
import java.io.File;
import java.io.FileReader;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
public class SAX002 {
public static void main(String[] args) throws Exception {
// 创建一个XMLReader对象
XMLReader xr = XMLReaderFactory.createXMLReader();
// 设置ContentHandler
xr.setContentHandler(new MyHandler());
// 设置要解析的xml文件
File file = new File("xml/test001.xml");
// 解析xml文件
xr.parse(new InputSource(new FileReader(file)));
// 打印成功信息
System.out.println("parsing success.");
}
}
class MyHandler extends DefaultHandler{
/**
* 最开始解析文档时调用此函数
*/
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
System.out.println("startDocument() invoked.");
}
/**
* 结束解析文档时调用此函数
*/
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
System.out.println("endDocument() invoked.");
}
/**
* 功能:每结束一个元素标签都会调用此函数
*
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("endElement:" + localName);
}
/**
* 功能:每解析一个元素标签都会调用此函数
* uri-命名空间,如果没有为空
* localName-指向标签的名字:如<student> localName = student
* qName-指向带前缀的标签的名字;如 <ss:student> qName = ss:student
* atts-指向元素的属性
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
System.out.println("startElement:" + localName);
}
/**
* 功能:打印标签中的字符串
* ch-字符数组
* start-读取字符串的起始长度
* length-读取字符串的总长度
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
System.out.println(new String(ch,start,length));
}
}