Android从后台获取数据xml解析之sax解析

上一篇讲了dom解析,所以这一次要讲的就是sax解析了。
sax解析是边读边解析。它的优点是解析速度快,占用内存少,非常适合在android移动设备中使用。它就是对文档进行顺序扫描。
当扫描到文档开始与结束,元素开始与结束,文档开始与结束的时候通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
在sax接口中,事件源是org.xml.sax包中的xmlreader,它通过parser()方法来解析xml文档并产生事件。
常用的sax接口和类:
Attrbutes:
用于得到属性的个数,名字,和值。
ContentHandler:
定义与文档本身关联的事件。比如开始和结束标记。
DTDHandler:
定义与DTD关联的事件,它没有定义足够的事件来完整的报告DTD。
EntityResolver:
定义与装入实体关联的事件,只有少数几个应用程序注册这些事件。
DefaultHandler:
大多数情况下,为应用程序扩展。
具体代码:


        @Override
        protected Object doInBackground(Object[] objects) {

            final List fqs=new ArrayList<>();

            //获取网络数据
            //01.定义获取网络的数据的路径
            String path=getString(R.string.server_name)+"fqActiongetXML.action";
            try {
                //02.实例化Url
                URL url=new URL(path);
                //03.获取连接对象
                HttpURLConnection conn= (HttpURLConnection) url.openConnection();
                //04.设置请求方式
                conn.setRequestMethod("GET");
                //05.设置请求连接超时的时间
                conn.setConnectTimeout(5000);

                //06.获取响应码
                int code=conn.getResponseCode();
                if(code==200){
                    //07.获取返回过来的数据(XML)
                    InputStream is =conn.getInputStream();
                    //08.测试(删除-注释)
                    //缓冲字符流
                    String str=null;
// BufferedReader br=new BufferedReader(new InputStreamReader(is));
// while((str=br.readLine())!=null){
// Log.i("test",str);
// }

                    //02.使用SAX解析:特点:边读边解析 基于事件(方法)驱动方式
                    //开始文档 开始标签 结束标签 结束文档 文本

// try {
// SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
// SAXParser saxParser=saxParserFactory.newSAXParser();
//
// saxParser.parse(is,new DefaultHandler(){
// @Override
// public void startDocument() throws SAXException {
// super.startDocument();
// }
//
// @Override
// public void endDocument() throws SAXException {
// super.endDocument();
// }
//
// @Override
// public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// super.startElement(uri, localName, qName, attributes);
// currentTag=localName;
// if("fq".equals(localName)){
// //实例化对象
// fq = new FQ();
// String name=attributes.getValue(0);
// fq.setName(name);
// }
//
// }
//
// @Override
// public void endElement(String uri, String localName, String qName) throws SAXException {
// super.endElement(uri, localName, qName);
// //细节:
// currentTag=null;
// if("fq".equals(localName)){
// fqs.add(fq);
// }
// }
//
// @Override
// public void characters(char[] ch, int start, int length) throws SAXException {
// super.characters(ch, start, length);
// if("content".equals(currentTag)){
// String content=new String(ch,start,length);
// fq.setContent(content);
// } else if("time".equals(currentTag)){
// String time=new String(ch,start,length);
// fq.setTime(time);
// }
// }
// });
// } catch (ParserConfigurationException e) {
// e.printStackTrace();
// } catch (SAXException e) {
// e.printStackTrace();
// }

你可能感兴趣的:(Android从后台获取数据xml解析之sax解析)