android使用sax解析xml
2015-12-27 14:38
615 查看
新建一个类继承DefaultHandler
一个HttpUtils2类
一个SaxService2类
测试类
把如下xml文件放到tomcat中,就可以就行测试读取xml文件了
使用SAX的优点是:
因为SAX的优势是流的方式处理,当遇到一个标签的时候,并不会记录下当前所碰到的标签。
也就是说,startEelment方法中,你所知道的信息,仅仅是当前的签名的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元素与其他结构相关的信息,都是不知道的
package com.sax.handler; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class MyHandler2 extends DefaultHandler { private String currentTag=null; private String currentValue=null; private String nodeName=null; private HashMap<String, String> map=null; private List<HashMap<String, String>> list=null; public List<HashMap<String, String>> getList() { return list; } public MyHandler2(String nodeName) { // TODO Auto-generated constructor stub this.nodeName=nodeName; } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub list=new ArrayList<HashMap<String,String>>(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub if (qName!=null && !qName.equals("")&&qName.equals(nodeName)) { map=new HashMap<String, String>(); } currentTag=qName; } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub if (map!=null && currentTag!=null ) { currentValue=new String(ch, start, length); if (currentValue!=null && !currentValue.equals("") &&!currentValue.startsWith("\n")) { map.put(currentTag, currentValue); } } currentTag=null; currentValue=null; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub if (qName!=null&&qName.equals(nodeName)) { list.add(map); } } }
一个HttpUtils2类
package com.sax.http; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class HttpUtils2 { public HttpUtils2() { // TODO Auto-generated constructor stub } public InputStream getXML(String path){ InputStream inputStream=null; URL url; try { url = new URL(path); HttpURLConnection httpUrlConnection=(HttpURLConnection) url.openConnection(); httpUrlConnection.setConnectTimeout(3000); httpUrlConnection.setRequestMethod("GET"); if (httpUrlConnection.getResponseCode()==200) { inputStream=httpUrlConnection.getInputStream(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return inputStream; } }
一个SaxService2类
package com.sax.service; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; import com.sax.handler.MyHandler2; import com.sun.org.apache.xerces.internal.parsers.SAXParser; public class SaxService2 { public SaxService2() { // TODO Auto-generated constructor stub } public List<HashMap<String, String>> parseXML(InputStream is,MyHandler2 dh){ List<HashMap<String, String>> list=null; SAXParserFactory factory=SAXParserFactory.newInstance(); try { javax.xml.parsers.SAXParser saxParser=factory.newSAXParser(); saxParser.parse(is, dh); list=dh.getList(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }
测试类
package com.sax.test; import java.io.InputStream; import java.util.HashMap; import java.util.List; import com.sax.handler.MyHandler2; import com.sax.http.HttpUtils2; import com.sax.service.SaxService2; public class Test2 { public Test2() { // TODO Auto-generated constructor stub } public static void main(String[] args) { System.out.println("My test...."); SaxService2 service=new SaxService2(); MyHandler2 hd=new MyHandler2("person"); HttpUtils2 util=new HttpUtils2(); String path = "http://127.0.0.1:8080/person.xml"; InputStream inputStream=util.getXML(path); List<HashMap<String, String>> list=service.parseXML(inputStream, hd); for (HashMap<String, String> hashMap : list) { System.out.println(hashMap.toString()); } } }
把如下xml文件放到tomcat中,就可以就行测试读取xml文件了
<?xml version="1.0" encoding="GBK"?> <persons> <person> <id>23</id> <name>张三</name> <age>30</age> </person> <person> <id>20</id> <name>李四</name> <age>25</age> </person> </persons>
使用SAX的优点是:
因为SAX的优势是流的方式处理,当遇到一个标签的时候,并不会记录下当前所碰到的标签。
也就是说,startEelment方法中,你所知道的信息,仅仅是当前的签名的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元素与其他结构相关的信息,都是不知道的
相关文章推荐
- 修改Android签名证书keystore的密码、别名alias以及别名密码
- Android 学习
- socket programming in kernel
- Android—— ubuntu下【CTS】測试TV真机
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
- android studio aidl couldn't find import for class
- Android开发之音乐播放器的实现
- Android模拟器(包括Genymotion)访问本机服务器
- gentoo下编译arm64版本Qt5.5 for android
- Android 在ListView使用addHeader注意的问题
- android读取系统相册,设置头像
- Android Animation初识
- Android Studio目录结构浅析
- Android Studio - MAC 版 - 快捷键详解
- Android 的机型适配: 屏幕适配(包括dpi,dp,sp的概念) 版本适配 硬件适配。 以及如何和美工配合
- Android Dialog 点击不消失
- Android5.0L下因sensorservice crash导致systemserver重新启动的第二种场景分析
- IOS 与ANDROID框架及应用开发模式对照一
- Android实现短信验证功能(功能的使用)
- Android学习06Android应用程序的基本组件