SAX解析
2017-07-18 11:23 烈'焰 阅读(240) 评论(0) 收藏 举报SAX是一种较长使用的解析方式,要使用它首先要创建一个类继承DefaultHandler,并且重写5个方法,下面我们来看一下
startDocument()方法会在xml解析的时候调用,
startElement()方法会在开始解析某个节点的时候调用,
characters()方法中获取节点中的内容的时候调用,
endElement()方法会在完成某个节点解析的时候调用,
endDocument()方法完成整个XML解析的时候调用。
public class ContenltHandler extends DefaultHandler {
private String mnodeName;
private StringBuilder mid;
@Override
public void startDocument() throws SAXException {
//初始化节点
mid = new StringBuilder();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
//获取节点的名字
mnodeName = localName;
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
//根据当前节点名判断内容
if ("id".equals(mnodeName)){
//成功后将内容添加到对应的StringBuilder对象中
mid.append(ch,start,length);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if ("student".equals(localName)){
Log.d("id",mid.toString().trim());
//将StringBuilder里面的数据清空
mid.setLength(0);
}
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
}
下面还是和okHttp方法相同
1.定义一个OkHttp实例
2.利用Request得到uri
3.通过实例发送和接收返回的数据
private void parseSAX() {
new Thread(new Runnable() {
@Override
public void run() {
try {
OkHttpClient click = new OkHttpClient();
Request request = new Request.Builder().url("http://10.39.1.16/1.xml").build();
Response response= click.newCall(request).execute();
String returnData= response.body().string();
parserSaxpull(returnData);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
public void parserSaxpull(String data){
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader xmlreader=factory.newSAXParser().getXMLReader();
ContentHandler hander= new ContenltHandler();
xmlreader.setContentHandler(hander);//将ContentHandler设置到XMLReader,把材料加到机器中
//开始解析
xmlreader.parse(new InputSource(new StringReader(data)));
}catch (Exception e){}
}
浙公网安备 33010602011771号