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<FQ> 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();
//                    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值