Java数据解析---PULL

安卓和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]

控制台信息

时间: 2024-08-24 00:21:06

Java数据解析---PULL的相关文章

Java数据解析---SAX

一.Sax解析 是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档. Sax采用事件驱动的方式解析文档.简单点说,如同在电影院看电影一样,从头到尾看一遍就完了,不能回退(Dom可来来回回读取) 在看电影的过程中,每遇到一个情节,一段泪水,一次擦肩,你都会调动大脑和神经去接收或处理这些信息 同样,在Sax的解析过程中,读取到文档开头.结尾,元素的开头和结尾都会触发一些回调方法,你可以在这些回调方法中进行相应事件处理 这四个方法是:startDocument() . endDocum

Java反射机制实现微信公众平台XML数据解析

在做微信公众平台开发时,接收消息中有很多种类型的xml消息,比如"文本消息""图片消息""语音消息""视频消息""链接消息""地理位置消息"等等,最初在开发时针对每一种数据格式写了一个实体类,单独做解析,当然这样写的好处是层次分明.但经过尝试之后,用一个统一的实体类消息做处理,更加高效,当然,里面最核心的就是在遍历xml数据时,通过反射的机制动态调用set方法: 1.ReceiveXml

java学习----数据解析

在讲数据解析之前,由于笔者目前能力有限,所以我只能先讲一下XML解析,后面的时间会补上其他数据的解析 讲解目录: 1.何为数据解析 2.xml解析 3.Excel解析 4.json解析 一.何为数据解析 举个栗子----如果不同的程序之间需要通信,假如说A程序需要B程序做一件事,B程序说 我可以做这件事,但是你不需要给我必须的数据.我才能做这件事. 我们可以用下面一副图表示: 在上面这幅图中,两个数据的传输都是有数据格式的.我们要做的就是解析这种数据格式或者生成这种数据格式的数据 二.XML解析

iOS网络数据解析

iOS开发过程中,网络数据的传输过程一般是:客户端发送请求给服务器,服务器接收到客户端发送的网络请求后返回相应的数据.此时客户端需要把服务器返回的数据转化为前段和移动端开发中使用的数据格式(如OC/java).后台服务器一般使用php.java..net进行开发,而前段和移动端使用的一般是OC/JAVA/HTML/CSS/JS,做好前后端的数据交互极为重要,如今数据交互常用的就是JSON和XML.下面就iOS开发过程中的JSON解析和XML解析进行简单的说明. 一.JSON解析 JSON是一种轻

Android中XML数据解析

转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的.结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD定义了文

数据解析1:XML解析(1)

Http网络传输中的数据组织格式主要有三种: 1.HTML方式 2.XML方式 3.JSON方式 其中XML方式的数据解析有三种:DOM解析,SAX解析,Pull解析. 下面主要讲解SAX解析. 因为SAX解析是解析XML格式的数据的,那么首先要大致了解下什么是XML,以及XML数据有什么特点. 下面是一个XML数据文件: 分析:XML文件和HTML文件很相似,都是由标签构成,但是XML比HTML更灵活,XML被称为可扩展性标记语言.其中第一行的是固定的格式,文件主体全部有双标签构成,且标签是自

网络相关系列之四:数据解析之SAX方式解析XML数据

一.XML和Json数据的引入: 通常情况下.每一个须要訪问网络的应用程序都会有一个自己的server.我们能够向server提交数据,也能够从server获取数据.只是这个时候就有一个问题,这些数据是以什么格式在网络上传输的呢?一般我们都会在网络上传输一些格式化后的数据,这样的数据会有一定的结构规格和语言,当还有一方收到数据消息后就能够依照同样的结构规格进行解析.从而取出它想要的那部分内容. 在网络上数据传输最经常使用的格式:XML和Json.本文就来学习一下XML数据的解析,Json格式的数

Json/XML/HTML数据解析

Json数据解析 https://code.google.com/p/google-gson/ 谷歌官方的jjson解析类库Gson http://www.jsonschema2pojo.org/ 该网站能将Json数据解析为POJO(简单的java对象). 1.单个对象 假设json数据如下: { "id": 100, "body": "It is my post", "number": 0.13, "create

数据解析1:XML解析(3)

XML解析的第二种方法是PULL解析. PULL解析是以事件常量的的方法进行解析,何为事件常量? 当解析器从头到尾解析XML文件时,解析到文档开头定义为解析到一个常量XmlPullParser.START_DOCUMENT,当解析到开始标签定义为解析到一个常量XmlPullParser.START_TAG,当解析到结束标签定义为解析到一个常量XmlPullParser.END_TAG,当解析到文档结尾定义为解析到一个常量XmlPullParser.END_DOCUMENT. 下面是PULL解析的