本示例向您展示如何使用SAX(XML的简单API)解析器读取/解析xml文件。在主类(SAXDemo),我们创建的实例SAXParserFactory和SAXParser。该SAXParser.parse()方法将解析给定的内容,InputStream并使用SAXHandler我们创建的类处理xml文档。package org.nhooo.example.xml;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.InputStream;
public class SAXDemo {
public static void main(String[] args) throws Exception {
// 创建一个新的SAXParserFactory实例,该实例依次
// 创建一个SAXParser。
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
// 在以下期间将监听SAX事件的处理程序
// xml遍历。
SAXHandler handler = new SAXHandler();
InputStream data = SAXDemo.class.getResourceAsStream("/person.xml");
parser.parse(data, handler);
}
}
该SAXHandler班从扩展org.xml.sax.helpers.DefaultHandler类。处理程序将监听由触发的事件SAXParser。这种处理方法是由接口,如所定义的ContentHandler,ErrorHandler,DTDHandler,和EntityResolver。
例如,为了读取XML文件的内容有方法来监听事件如startDocument,endDocument,startElement,endElement,等等,其中由定义的ContentHandler接口。package org.nhooo.example.xml;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXHandler extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
System.out.println("startDocument");
}
@Override
public void endDocument() throws SAXException {
System.out.println("endDocument");
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("startElement: " + qName);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("endElement");
}
@Override
public void characters(char[] ch, int start, int length)throws SAXException {
System.out.println("characters : " + new String(ch, start, length));
}
}
这里,我们的程序将读取xml文件的示例:
Foo
Bar
我们的程序将打印以下输出:startDocument
startElement: root
characters :
startElement: persons
characters :
startElement: person
characters :
startElement: name
characters : Foo
endElement
characters :
endElement
characters :
startElement: person
characters :
startElement: name
characters : Bar
endElement
characters :
endElement
characters :
endElement
characters :
endElement
endDocument