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:
大多数情况下,为应用程序扩展。
具体代码:
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(); // }
相关文章推荐
- Android - 获取网络数据,Bitmap,ANR,主线程模型,消息机制,UserAgent,乱码问题,xml生成与解析,JSON解析,MVC,SmartImageView
- Android XML数据解析——SAX解析
- android之HTTP请求后台数据,GSON解析数据,异步获取数据
- 【Android应用开发】-(17)获取Google天气预报通过Xml和JSON解析数据
- Android 获取Google Weather API 并通过Xml和JSON解析数据
- Android 网络获取数据之XML解析
- Android 与 web后台数据交互之解析XML和JSON
- Android - xml动画,识别手势动作,代码抽取,获取手机SIM卡串号,获取联系人数据,开机广播,发送/解析短信,报警音乐
- 本地提供XML数据,Android端获取并解析成List集合显示
- Android 从Java后台取数据之解析XML
- Android 获取并解析网络XML与数据上传
- android解析xml和json数据(获取本地服务器数据)
- Android 获取Google Weather API 并通过Xml和JSON解析数据
- Android网络编程-----从服务器端获取xml数据并解析
- Android 解析后台返回为Json数据的简单例子!!!
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android 解析后台返回为Json数据的简单例子!!!
- Android XML解析Pull方式———解析网络数据示例
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android开发之获取web服务器xml数据