码迷,mamicode.com
首页 > 编程语言 > 详细

Java数据解析---PULL

时间:2015-08-25 23:23:45      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:

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

1、PULL解析

2、SAX解析

3、DOM解析

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

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

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

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

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

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

技术分享
 1 public class PullParser {
 2     
 3     public List<Worker> pullParsers() throws XmlPullParserException, IOException
 4     {
 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]
控制台信息

 

Java数据解析---PULL

标签:

原文地址:http://www.cnblogs.com/xqxacm/p/4758702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!