安卓和JAVA解析xml文件的三种方式:

1、PULL解析

2、SAX解析

3、DOM解析

三者各有所长,依情况选择解析方式

1、PULL和SAX均采用流式解析,意味着只能从头读到底,无法像DOM解析一样随机访问xml文件中的任意一个节点

2、PULL和SAX占用更少的内存解析,更适用于安卓上的解析xml文件

3、DOM解析时将文件全部解析完,最后让用户任意取特定的信息

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面学习PULL解析方式。(PULL方法的简洁性是它最大的优势)

1、解析本地xml文件

 1 public class PullParser {2     3     public List<Worker> pullParsers() throws XmlPullParserException, IOException4     {5         List<Worker> list = null;6         Worker worker = null;7         //第一步:创建XML解析对象,需要通过工厂模式创建类的实例8         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();9         XmlPullParser parser = factory.newPullParser();
10 //        第二步:设置待解析的xml数据源
11         FileInputStream fis = new FileInputStream("worker.xml");
12         parser.setInput(fis,"utf-8");
13 //        第三步:获取当前xml标签的事件类型
14         int event = parser.getEventType();
15 //        第四步:通过分支语句处理不同的事件标签
16         while(event!=XmlPullParser.END_DOCUMENT)
17         {
18
19             switch(event)
20             {
21 //            第五步:获取标签名称,处理标签信息
22             case XmlPullParser.START_DOCUMENT://解析文件开始,创建列表集合对象
23                 list = new ArrayList<Worker>();
24                 break;
25             case XmlPullParser.START_TAG:
26                 String tagName = parser.getName();
27                 if("worker".equals(tagName))
28                 {
29                     worker = new Worker();
30                     int count = parser.getAttributeCount();//得到属性的个数
31                     for(int i=0;i<count;i++)
32                     {
33                         String attrName = parser.getAttributeName(i);
34                         String attrValue = parser.getAttributeValue(i);
35                         if("id".equals(attrName))
36                             worker.setId(attrValue);
37                     }
38                 }
39                 else if("name".equals(tagName))
40                     worker.setName(parser.nextText());
41                     worker.setMoney(Double.parseDouble(parser.nextText()));
42                 break;
43
44             case XmlPullParser.END_TAG://解析文件结束,
45                  if("worker".equals(parser.getName()))
46                  {
47 //                第六步:将处理的数据保存到JavaBean或Map对象中
48                      list.add(worker);
49                      worker = null;
50                  }
51                  break;
52             }
53 //            第七步:获取下一个标签的事件类型,判断事件类型是否为文档结束事件,如果是则退出,反之重复第四、五、六步
54             event = parser.next();
55         }
56         return list;
57     }
58
59     /**
60      * @param args
61      * @throws IOException
62      * @throws XmlPullParserException
63      */
64     public static void main(String[] args) throws XmlPullParserException, IOException {
65         PullParser  pullParser = new PullParser();
66         List<Worker> list = pullParser.pullParsers();
67
68         for(Worker w:list)
69         {
70             System.out.println(w);
71         }
72     }
73
74 }

Demo

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <workers>
 3     <worker id="AQ01">
 4         <name>Mark</name>
 5     </worker>
 6     <worker id="AD02">
 7         <name>Luch</name>
 8     </worker>
 9     <worker id="AD03">
10         <name>Lily</name>
11     </worker>
12     <worker id="AD04">
13         <name>Lily</name>
14     </worker>
15 </workers>

xml文件

 1 package com.qianfeng.pullparser2;
 2
 3 public class Worker {
 4
 5     private String id;
 6     private String name;
 7
 8     public Worker() {
 9         super();
10         // TODO Auto-generated constructor stub
11     }
12     public Worker(String id, String name) {
13         super();
14         this.id = id;
15         this.name = name;
16
17     }
18     public String getId() {
19         return id;
20     }
21     public void setId(String id) {
22         this.id = id;
23     }
24     public String getName() {
25         return name;
26     }
27     public void setName(String name) {
28         this.name = name;
29     }
30
31     @Override
32     public String toString() {
33         return "Worker [id=" + id + ", name=" + name + "]";
34     }
35 }

Worker.class 对象类

解析效果:

1 Worker [id=AQ01, name=Mark]
2 Worker [id=AD02, name=Luch]
3 Worker [id=AD03, name=Lily]
4 Worker [id=AD04, name=Lily]

控制台信息

2、解析服务器的xml文件

 1 package pull;
 2
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.util.ArrayList;
 6 import java.util.List;
 7
 8 import org.xmlpull.v1.XmlPullParser;
 9 import org.xmlpull.v1.XmlPullParserException;
10 import org.xmlpull.v1.XmlPullParserFactory;
11
12 public class Pull {
13
14     /**
15      * @param args
16      * @throws XmlPullParserException
17      * @throws IOException
18      */
19     public static void main(String[] args) throws XmlPullParserException, IOException {
20         // TODO Auto-generated method stub
21         List<Person> list = null;
22         Person person=null;
23
24         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
25         XmlPullParser parser =  factory.newPullParser();
26         String path ="http://localhost:8080/aaa/person.xml";
27         InputStream in = HttpUtil.getInputStream(path);
28         parser.setInput(in, "utf-8");
29         int event = parser.getEventType();
30         while(event!=XmlPullParser.END_DOCUMENT)
31         {
32             switch(event)
33             {
34             case XmlPullParser.START_DOCUMENT:
35                 System.out.println("文件解析开始");
36                 list = new ArrayList<Person>();
37                 break;
38             case XmlPullParser.START_TAG:
39                 String str = parser.getName();
40                 if("person".equals(str))
41                 {
42                     person = new Person();
43                     int count = parser.getAttributeCount();
44                     for(int i=0;i<count;i++)
45                     {
46                         String key = parser.getAttributeName(i);
47                         String value = parser.getAttributeValue(i);
48                         if("id".equals(key))
49                         {
50                             person.setName(value);
51                         }
52                     }
53                 }
54                 else if("name".equals(str))
55                 {
56                     person.setName(parser.nextText());
57                 }
58                 break;
59             case XmlPullParser.END_TAG:
60                 if("person".equals(parser.getName()))
61                 {
62                     list.add(person);
63                     person=null;
64                 }
65                 break;
66             }
67             event = parser.next();
68
69         }
70
71         for(int i=0;i<list.size();i++)
72         {
73             System.out.println(list);
74         }
75
76
77     }
78
79 }

View Code

对应的HttpUtil自定义类getInpustStream方法

 1 package pull;
 2
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.net.HttpURLConnection;
 6 import java.net.MalformedURLException;
 7 import java.net.URL;
 8
 9 public class HttpUtil {
10     public static InputStream getInputStream(String path) throws IOException{
11         URL url = new URL(path);
12         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
13         conn.setRequestMethod("GET");
14         conn.setConnectTimeout(5000);
15         conn.setDoInput(true);
16         if(conn.getResponseCode() ==200)
17         {
18             InputStream in = conn.getInputStream();
19             return in;
20         }
21
22
23         return null;
24
25     }
26
27 }

HttpHtil.java

解析效果:

1 文件解析开始
2 [Pserson [id=0, name=张老师, age=0], Pserson [id=0, name=李老师, age=0]]
3 [Pserson [id=0, name=张老师, age=0], Pserson [id=0, name=李老师, age=0]]

控制台信息

Java数据解析---PULL相关推荐

  1. Java数据解析之XML(原创)

    文章大纲 一.XML解析介绍 二.Java中XML解析介绍 三.XML解析实战 四.项目源码下载 一.XML解析介绍   最基础的XML解析方式有DOM和SAX,DOM和SAX是与平台无关的官方解析方 ...

  2. java json解析 代码_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  3. java webservice 接收数据_WebService客户端,接收数据解析存入数据库

    WebService客户端,实现的功能是接收数据,按格式解析数据,最后存入相应数据库. 需求: 同步设备信息接口 url:http://localhost:54059/Service1.asmx 函数 ...

  4. java jsoup解析开彩网api接口json数据实例

    https://www.cnblogs.com/zdz8207/p/7288830.html 开彩网apiJava技术学习 https://www.itkc8.com json-lib-2.4-jdk ...

  5. ajax写入json数据格式化,java ajax解析json数据格式化

    java ajax解析json数据格式化 [2021-02-01 23:35:58]  简介: 服务器 hadoop格式化HDFS出现错误解决办法 报错信息: host:java.net.Unknow ...

  6. java数组里套数组_用JAVA进行Json数据解析(对象数组的相互嵌套)

    这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对Json数据的解析,所以特地来总结一下! 假设我们要对如下数据进行解析,其实在平时,返回的Json数据是很乱的,很难分清数据的关系,这是经过相 ...

  7. java 文件解析成JSON数据(其三)

    个人用途,用于将数据解析成json格式使用 import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; ...

  8. java爬取网页数据_Python网络爬虫实战(二)数据解析

    Python网络爬虫实战 (二)数据解析 本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站 ...

  9. Java 使用Socket 实现基于DTU的TCP服务器 + 数据解析 + 心跳检测

    在物联网时代,DTU的运用非常广泛 :环境监测中通过DTU将传感器的数据远程传输至云服务器也是比较常见的用法.下面我来分享一下我的项目经验 1.物理连接拓扑 2.服务器后台流程 3.代码 设备TCP服 ...

最新文章

  1. Android开发实战三之导入现有Android工程项目
  2. php foreach 不等于_PHP中的7个模板引擎
  3. mysql---视图
  4. python计算组合数_Python实现的排列组合计算操作示例
  5. 致力协同办公oa系统服务器设置,致力协同办公oa系统安装手册新.pdf
  6. linux没有jre文件夹,linux上配置jdk时,java命令提示没有此文件或文件夹的解决方法...
  7. 面试必会系列 - 1.5 Java 锁机制
  8. 显示桌面,原来这么简单的
  9. EZchip将推全球首款100核64位ARM A-53芯片
  10. silverlight图形编辑livegeometry修改
  11. 使用数字全通滤波器对IIR滤波器进行相位补偿
  12. 摄氏度和开氏度的换算_摄氏度与开氏度换算(开氏度和摄氏度的换算公式)
  13. 金蝶kis系统连接服务器,金蝶kis专业版如何设置连接服务器
  14. git pull时候报错443
  15. 老鱼Python数据分析——篇十五:“选股宝”使用API下载JSON格式数据
  16. 如何用python抓取qq音乐_手把手教你使用Python抓取QQ音乐数据
  17. 一对一直播源码,实现一个简单的登录界面
  18. 为什么引入非线性激励函数
  19. Python爬虫进阶——urllib模块使用案例【淘宝】
  20. python随机抽签列表中的同学值日_神奇的大抽签--Python中的列表,中国大学MOOC(慕课)答案公众号搜题...

热门文章

  1. [收藏] 微软850位顶级人才不做Windows研发
  2. 浅入浅出Typescript Decorators
  3. 软件素材---linux C语言:拼接字符串函数 strcat的用例(与char数组联合使用挺好)...
  4. MathType可以在Word、PPT中插入矩阵吗
  5. GridView+ZedGraph【转】
  6. Twain 学习纪录
  7. window.parent ,window.top,window.self 详解
  8. 乙肝相关药物服用信息汇总
  9. Pessimistic Error Pruning example of C4.5
  10. Python/word.so: undefined symbol: _ZNK4Word7reverseEv