Java数据解析---PULL
安卓和JAVA解析xml文件的三种方式:
1、PULL解析
2、SAX解析
3、DOM解析
三者各有所长,依情况选择解析方式
1、PULL和SAX均采用流式解析,意味着只能从头读到底,无法像DOM解析一样随机访问xml文件中的任意一个节点
2、PULL和SAX占用更少的内存解析,更适用于安卓上的解析xml文件
3、DOM解析时将文件全部解析完,最后让用户任意取特定的信息
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面学习PULL解析方式。(PULL方法的简洁性是它最大的优势)
1、解析本地xml文件
![](/assets/blank.gif)
![](/assets/blank.gif)
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
![](/assets/blank.gif)
![](/assets/blank.gif)
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文件
![](/assets/blank.gif)
![](/assets/blank.gif)
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 对象类
解析效果:
![](/assets/blank.gif)
![](/assets/blank.gif)
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文件
![](/assets/blank.gif)
![](/assets/blank.gif)
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方法
![](/assets/blank.gif)
![](/assets/blank.gif)
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
解析效果:
![](/assets/blank.gif)
![](/assets/blank.gif)
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相关推荐
- Java数据解析之XML(原创)
文章大纲 一.XML解析介绍 二.Java中XML解析介绍 三.XML解析实战 四.项目源码下载 一.XML解析介绍 最基础的XML解析方式有DOM和SAX,DOM和SAX是与平台无关的官方解析方 ...
- java json解析 代码_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- java webservice 接收数据_WebService客户端,接收数据解析存入数据库
WebService客户端,实现的功能是接收数据,按格式解析数据,最后存入相应数据库. 需求: 同步设备信息接口 url:http://localhost:54059/Service1.asmx 函数 ...
- java jsoup解析开彩网api接口json数据实例
https://www.cnblogs.com/zdz8207/p/7288830.html 开彩网apiJava技术学习 https://www.itkc8.com json-lib-2.4-jdk ...
- ajax写入json数据格式化,java ajax解析json数据格式化
java ajax解析json数据格式化 [2021-02-01 23:35:58] 简介: 服务器 hadoop格式化HDFS出现错误解决办法 报错信息: host:java.net.Unknow ...
- java数组里套数组_用JAVA进行Json数据解析(对象数组的相互嵌套)
这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对Json数据的解析,所以特地来总结一下! 假设我们要对如下数据进行解析,其实在平时,返回的Json数据是很乱的,很难分清数据的关系,这是经过相 ...
- java 文件解析成JSON数据(其三)
个人用途,用于将数据解析成json格式使用 import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; ...
- java爬取网页数据_Python网络爬虫实战(二)数据解析
Python网络爬虫实战 (二)数据解析 本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站 ...
- Java 使用Socket 实现基于DTU的TCP服务器 + 数据解析 + 心跳检测
在物联网时代,DTU的运用非常广泛 :环境监测中通过DTU将传感器的数据远程传输至云服务器也是比较常见的用法.下面我来分享一下我的项目经验 1.物理连接拓扑 2.服务器后台流程 3.代码 设备TCP服 ...
最新文章
- linux xampp常见问题
- Adaboost算法和提升树算法
- linux服务器非root用户安装Anaconda,并配置tensorflow/pytorch
- Java实现数组逆置
- php 数组指向下一个值,比较数组值并根据自定义值(PHP)在数组中查找下一个值 - php...
- 131. 分割回文串
- 性能进阶:使用JMeter进行websocket测试
- [leetcode]146. LRU缓存机制
- 庆祝我的第一本书出版
- 线索二叉树实现(中序)
- java毕业设计旅游官网mybatis+源码+调试部署+系统+数据库+lw
- JSP Commons-FileUpload 组件实现文件上传
- Google Adsense(Google网站联盟)广告申请指南
- 胜为蓝牙适配器驱动_udc 324b蓝牙驱动下载|
- Unity高德定位获取天气预报
- 设计冲刺案例|谷歌设计冲刺用4天确定热卖智能相机Clips的功能特性
- linux压缩包解压
- 一男老师每日百词转载+连载(3)
- Python爬虫---爬取腾讯动漫全站漫画
- 微型计算机循环结构程序,微机原理(循环程序设计)..doc
热门文章
- 回溯法求解N皇后问题(Java实现)
- Connection is not open httpClient 的问题解决方案
- PB9.0实现下拉数据列表的实现
- Windows 2003 系统管理 视频教程 http://www.91xueit.comm 下载
- 简单的导出表格和将表格下载到桌面上。
- kafka关闭终端继续执行命令(转载)
- Unchecked call to ‘mapoPair(PairFunction<T,K2,V2>)‘ as a member of raw type
- kafka高可用集群搭建
- 为什么spark没有java的交互模式?
- SVM推导过程及SMO详细求解过程(转载+自己笔记)