package com.banking.xc.utils.xml.frame;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public abstract class XmlParseHandler extends DefaultHandler{
private XmlParseListener xmlParseListener;
InputStream inputStream;
public abstract void cancelParse();
public abstract void destroy();
public XmlParseHandler(XmlParseListener xmlParseListener,InputStream inputStream){
this.xmlParseListener = xmlParseListener;
this.inputStream = inputStream;
}
public void parse(){
try {
readXml();
} catch (Exception e) {
e.printStackTrace();
System.out.println("XC XmlParseHandler parae() exception");
//if(Log)
System.out.println("XC XmlParseHandler exception"+e);
//解析时异常放到onParseErro处理
//空列表异常自己根据个数处理,详见listview
xmlParseListener.onParseError(e.toString());
}
}
protected XmlParseListener getXmlParseListener(){
return xmlParseListener;
}
private void readXml() {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = null;
try {
saxParser = spf.newSAXParser();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //创建解析器
try {
saxParser.parse(inputStream, this);
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public abstract Object getObjectWhenEnd();
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
xmlParseListener.onParseSuccess(this.getObjectWhenEnd());
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
destroy();
}
}