您的位置:首页 > 移动开发 > Android开发

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

2017-02-27 01:09 387 查看
上一篇讲了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();
//                    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐