SAX工作原来就是对文档进行顺序扫描,当扫描文档、元素的开始与结束等地方时通知事件处理函数——startDocument()、endDocument()、startElement()、endElement()等等
ContentHandler是JAVA类包中一个特殊的SAX接口,位于org.xml.sax包中,它包含了很多接口需要实现,因为我们只需要其中复写某一部分的代码,所以没有必要实现接口的全部内容,所以我们一般继承它的子类DefaultHandler
public class SAXxmlActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
//得到SAX解析工厂
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
//通过SAX解析工厂得到SAX解析器
SAXParser saxParser = saxFactory.newSAXParser();
//得到读取XML文件流对象
XMLReader xmlReader = saxParser.getXMLReader();
//设置数据元,即要操作的数据流句柄
xmlReader.setContentHandler(new ReadXML());
//解析XML文件
xmlReader.parse(new InputSource(new FileInputStream("/sdcard/connection.xml")));
} catch (ParserConfigurationException e) {
System.out.println("1");
} catch (SAXException e) {
System.out.println("2");
} catch (FileNotFoundException e) {
System.out.println("3");
} catch (IOException e) {
System.out.println("4");
}
}
}
解析XML文件监听的事件
public class ReadXML 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 endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("uri : " + uri);
System.out.println("localName : " + localName);
System.out.println("qName : " + qName);
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("startElement");
}
}