网络 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

转载于:https://www.cnblogs.com/renzimu/p/4535822.html

Android 开发工具类 13_ SaxService相关推荐

  1. Android开发工具类 Utils

    包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...

  2. Android开发工具类

    包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...

  3. Android开发工具类集合

    各种帮助类汇总:https://github.com/Blankj/AndroidUtilCode 常用的 ios 风格 dialog 和 meterial design 风格的 dialog:htt ...

  4. Android开发工具类、样式、一些配置

    Android Studio 开发工具类.样式.其余的配置 一.工具类 1.Log输出 2.轻量存储SharedPreferences 二.主题与样式 1.主题 2.常用样式 1.按钮圆角背景 2.按 ...

  5. android httputils更换成https请求,Android开发工具类之HttpUtils

    今天我们讲常用的开发工具类之HttpUtils,我发现上两次,我对于每个方法都进行了一定的解释,有人跟我评论和留言说,不用我解释,这么简单,这么明显的使用方法,再笨的人也能看懂,多此一举,好吧,这次我 ...

  6. Android开发工具类集锦

    概述 本人做android开发已有段日子了,在开发的过程中一直使用着工具类,包括别人已经封装好的工具类以及自己封装的工具类,本篇博客向大家介绍自己在开发过程中经常使用到的一些简单实用的工具类,在文章末 ...

  7. android 开发工具类,Android中常用开发工具类—持续更新...

    一.自定义ActionBar public class ActionBarTool { public static void setActionBarLayout(Activity act,Conte ...

  8. android开发工具类之获得WIFI IP地址或者手机网络IP

    有的时候我们需要获得WIFI的IP地址获得手机网络的IP地址,这是一个工具类,专门解决这个问题,这里需要两个权限: <uses-permission android:name="and ...

  9. Android开发工具类之FileUtils,ImageUtils

    文件工具类,可用于读写文件及对文件进行操作.如: readFile(String filePath) 读文件 writeFile(String filePath, String content, bo ...

最新文章

  1. Python max() 函数
  2. spring mvc框架设计与实现
  3. 《Ext JS 高级程序设计》的目录与样张
  4. Hibernate调用存储过程
  5. springboot项目集成docker
  6. 阅读 Linux 内核源码——共享内存
  7. 使WEBBROWSER 可编辑
  8. poj1274 最大二分匹配
  9. JavaScript-创建日志调试对象(面向对象实例)
  10. php图片旋转验证码,如何用php生成扭曲及旋转的验证码图片
  11. java 短信备份宝_Android实战教程第八篇之短信备份
  12. 从单个静止图像进行 3d 深度重建(论文2007)
  13. springboot 配置 P6spy
  14. AccessPort 0d 0a乱码
  15. Computer Networking——network layer QA
  16. Invalid format specifier的解决方法
  17. eclipse的安装与下载
  18. 考研英语 - word-list-16
  19. Windows下模拟dns迭代查询过程
  20. java quickfix_用Quickfix详解Fix(一)

热门文章

  1. C++中的vector使用范例-
  2. MATLAB 求图像的极大值极小值,平均值
  3. AttributeError: 'str' object has no attribute 'decode' django问题
  4. [转载]判断IE浏览器-世界上最短的代码
  5. 5-1 Django的路由层(urlconf)
  6. hdu6438 Buy and Resell 买卖物品 ccpc网络赛 贪心
  7. 怎么添加项目到SVN上面
  8. 有趣的库:pipe(类似linux | 管道)库
  9. Spark任务调度流程及调度策略分析
  10. 费马小定理与素数判定