package com.letv.http.parse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import com.letv.http.bean.LetvBaseBean;
import com.letv.http.exception.ParseException;
/**
* 主解析器,封装部分解析方法(面向XML DOM解析)
*
* 对解析方法,暂作包装,对异常处理的策略再定
* @param <D>
* */
public abstract class LetvDomParser<T extends LetvBaseBean> extends LetvBaseParser<T , String> {
public LetvDomParser(){
super(0);
}
public LetvDomParser(int from){
super(from);
}
@Override
public T parse(String data) throws ParseException {
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
ByteArrayInputStream inputStream = null ;
//得到DocumentBuilder对象
DocumentBuilder builder;
try {
builder = factory.newDocumentBuilder();
inputStream = new ByteArrayInputStream(data.getBytes());
Document document=builder.parse(inputStream);
return handler(document);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
inputStream = null ;
}
}
return null;
}
public abstract T handler(Document document);
}