代码改变世界

SAX解析

2017-07-18 11:23  烈'焰  阅读(231)  评论(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){}

    }