Android 开发工具类 13_ SaxService

网络 xml 解析方式
 1 package com.example.dashu_saxxml;
 2
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.util.HashMap;
 6 import java.util.List;
 7
 8 import javax.xml.parsers.SAXParser;
 9 import javax.xml.parsers.SAXParserFactory;
10
11 import org.xml.sax.InputSource;
12 import org.xml.sax.SAXParseException;
13
14 public class SaxService {
15     public SaxService() {
16     }
17
18     /**
19      * 网络xml解析方式
20      * */
21     public static List<HashMap<String, String>> readXML(
22             InputStream inputStream, String nodeName) {
23         List<HashMap<String, String>>list=null;
24         try {
25             //创建一个解析xml工厂对象
26             SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
27             SAXParser parser=saxParserFactory.newSAXParser();//解析xml
28             MyHandler myHandler=new MyHandler(nodeName);
29             parser.parse(inputStream, myHandler);
30             list=myHandler.getList();
31             inputStream.close();//关闭io
32         } catch (Exception e) {
33             // TODO: handle exception
34         }
35         return list;
36     }
37 }

MyHandler 继承 DefaultHandler 解析工具类

 1 package com.example.dashu_saxxml;
 2
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6
 7 import org.xml.sax.Attributes;
 8 import org.xml.sax.SAXException;
 9 import org.xml.sax.helpers.DefaultHandler;
10
11 import android.R.integer;
12
13 public class MyHandler extends DefaultHandler {
14     private HashMap<String, String> map = null;// 存储单个解析的完整对象
15     List<HashMap<String, String>> list = null;// 存储所以的解析对象
16     private String currentTag = null;// 正在解析元素的标签
17     private String currentValue = null;// 正在解析元素的值
18     private String nodeName = null;// 当前解析节点名称
19
20     public MyHandler(String nodeName) {
21         super();
22         this.nodeName = nodeName;
23     }
24
25     public List<HashMap<String, String>> getList() {
26         return list;
27     }
28
29     /**
30      * xml文件开始解析时候调用的方法
31      * */
32     @Override
33     public void startDocument() throws SAXException {
34         // TODO Auto-generated method stub
35         list = new ArrayList<HashMap<String, String>>();
36         super.startDocument();
37     }
38
39     /**
40      * 解析到节点开头调用方法<name>
41      * */
42     @Override
43     public void startElement(String uri, String localName, String qName,
44             Attributes attributes) throws SAXException {
45         // TODO Auto-generated method stub
46         if (qName.equals(nodeName)) {
47             map = new HashMap<String, String>();
48         }
49         if (attributes != null && map != null) {
50             for (int i = 0; i < attributes.getLength(); i++) {
51                 map.put(attributes.getQName(i), attributes.getValue(i));
52             }
53         }
54         currentTag = qName;
55     }
56
57     /**
58      * 解析到节点开头结尾中间夹的文字所调用的方法
59      * */
60     @Override
61     public void characters(char[] ch, int start, int length)
62             throws SAXException {
63         // TODO Auto-generated method stub
64         if (currentTag != null && map != null) {
65             currentValue = new String(ch, start, length);
66             if (currentValue != null && !currentValue.trim().equals("")
67                     && !currentValue.trim().equals("\n")) {
68                 map.put(currentTag, currentValue);
69             }
70         }
71         currentTag = null;// 把当前节点对应的值和标签设置为空
72         currentValue = null;
73     }
74
75     /**
76      * 解析到节点结尾调用方法</name>
77      * */
78     @Override
79     public void endElement(String uri, String localName, String qName)
80             throws SAXException {
81         // 遇到结束标记时候
82         if (qName.equals(nodeName)) {
83             list.add(map);
84             map = null;
85         }
86     }
87 }

dashu.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <user-list>
 3     <user id="1">
 4         <name>大树</name>
 5         <age>22</age>
 6     </user>
 7
 8     <user id="2">
 9         <name>梅子</name>
10         <age>28</age>
11     </user>
12
13     <user id="3">
14         <name>爸爸</name>
15         <age>48</age>
16     </user>
17
18     <user id="4">
19         <name>妈妈</name>
20         <age>48</age>
21     </user>
22 </user-list>

【参考文献】

http://blog.csdn.net/u010794950/article/details/24553733

时间: 2024-08-07 16:08:07

Android 开发工具类 13_ SaxService的相关文章

android开发工具类总结(一)

一.日志工具类 Log.java 1 public class L 2 { 3 private L() 4 { 5 /* 不可被实例化 */ 6 throw new UnsupportedOperationException("Cannot be instantiated!"); 7 } 8 // 是否需要打印bug,可以在application的onCreate函数里面初始化 9 public static boolean isDebug = true; 10 private sta

Android 开发工具类 35_PatchUtils

增量更新工具类[https://github.com/cundong/SmartAppUpdates] 1 import java.io.File; 2 3 import android.app.Activity; 4 import android.app.ProgressDialog; 5 import android.content.Context; 6 import android.content.Intent; 7 import android.net.Uri; 8 import and

Android开发工具类之DownloadManagerPro

这个工具类就是Android系统下载管理DownloadManager的一个增强类,提供了一些增强方法.或许大家不太了解这个安卓系统自带的DownloadManager这个类,我先做一个简单介绍吧.DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager.Query和DownloadManager.Request. DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息.用d

Android 开发工具类 03_HttpUtils

Http 请求的工具类: 1.异步的 Get 请求: 2.异步的 Post 请求: 3.Get 请求,获得返回数据: 4.向指定 URL 发送 POST方法的请求. 1 import java.io.BufferedReader; 2 import java.io.ByteArrayOutputStream; 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.InputStreamReader

Android 开发工具类 19_NetworkStateReceiver

检测网络状态改变类: 1.注册网络状态广播: 2.检查网络状态: 3.注销网络状态广播: 4.获取当前网络状态,true为网络连接成功,否则网络连接失败: 5.注册网络连接观察者: 6.注销网络连接观察者. 1 import java.util.ArrayList; 2 3 import android.content.BroadcastReceiver; 4 import android.content.Context; 5 import android.content.Intent; 6 i

Android 开发工具类 10_Toast 统一管理类

Toast 统一管理类: 1.短时间显示Toast: 2.长时间显示 Toast: 3.自定义显示 Toast 时间. 1 import android.content.Context; 2 import android.widget.Toast; 3 4 // Toast 统一管理类 5 public class T 6 { 7 8 private T() 9 { 10 /* cannot be instantiated */ 11 throw new UnsupportedOperation

Android 开发工具类 09_SPUtils

SharedPreferences 辅助类: 1.保存在手机里面的文件名: 2.保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法: 3.得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值: 4.移除某个 key 值已经对应的值: 5.清除所有数据: 6.查询某个 key 是否已经存在: 7.返回所有的键值对: 8.创建一个解决 SharedPreferencesCompat.apply 方法的一个兼容类: 1 import jav

Android 开发工具类 33_开机自运行

原理:该类派生自 BroadcastReceiver,重载方法 onReceive ,检测接收到的 Intent 是否符合 BOOT_COMPLETED,如果符合,则启动用户Activity. 1 import android.content.BroadcastReceiver; 2 import android.content.Context; 3 import android.content.Intent; 4 5 public class BootBroadcastReceiver ext

Android 开发工具类 31_WebService 获取手机号码归属地

AndroidInteractWithWebService.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12=