Android使用pull解析xml
一、理论准备
Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。
工程结构如下:

为什么把xml放在assets目录下呢,它和res/values目录的区别是系统不分配ID,好像没解决问题,暂时没查到资料。
二、上代码
package com.example.and_0003;import java.io.InputStream;import java.util.List;import com.hpu.entity.Student;import com.hpu.util.PullService;import android.app.Activity;import android.content.res.AssetManager;import android.os.Bundle;import android.util.Log;public class MainActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);AssetManager asset = getAssets();try {InputStream input = asset.open("student.xml");List<Student> list = PullService.getStudents(input);for (Student stu : list) {Log.e("StudentInfo","Person ID: " + stu.getId() + ","+ stu.getName() + ", " + stu.getAge() + ", "+ stu.getSex());}} catch (Throwable e) {e.printStackTrace();}}}
1: <?xml version="1.0" encoding="utf-8"?>2: <students>3: <student id="20110806100">4: <name>小明</name>5: <age>22</age>6: <sex>男</sex>7: </student>8: <student id="20110806101">9: <name>小李</name>10: <age>24</age>11: <sex>男</sex>12: </student>13: <student id="20110806102">14: <name>小丽</name>15: <age>21</age>16: <sex>女</sex>17: </student>18: </students>
package com.hpu.entity;
public class Student { private String id;
private String name;
private int age;
private String sex; public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
} }
1: package com.hpu.util;2:3: import java.io.InputStream;4: import java.util.ArrayList;5: import java.util.List;6:7: import org.xmlpull.v1.XmlPullParser;8: import org.xmlpull.v1.XmlPullParserFactory;9:10: import com.hpu.entity.Student;11:12: import android.util.Xml;13:14: public class PullService {15:16: // 采用XmlPullParser来解析XML文件17: public static List<Student> getStudents(InputStream inStream)18: throws Throwable {19: List<Student> students = null;20: Student mStudent = null;21:22: // ========创建XmlPullParser,有两种方式=======23: // 方式一:使用工厂类XmlPullParserFactory24: XmlPullParserFactory pullFactory = XmlPullParserFactory.newInstance();25: XmlPullParser parser = pullFactory.newPullParser();26: // 方式二:使用Android提供的实用工具类android.util.Xml27: // XmlPullParser parser = Xml.newPullParser();28:29: // 解析文件输入流30: parser.setInput(inStream, "UTF-8");31: // 产生第一个事件32: int eventType = parser.getEventType();33: // 只要不是文档结束事件,就一直循环34: while (eventType != XmlPullParser.END_DOCUMENT) {35: switch (eventType) {36: // 触发开始文档事件37: case XmlPullParser.START_DOCUMENT:38: students = new ArrayList<Student>();39: break;40: // 触发开始元素事件41: case XmlPullParser.START_TAG:42: // 获取解析器当前指向的元素的名称43: String name = parser.getName();44: if ("student".equals(name)) {45: // 通过解析器获取id的元素值,并设置student的id46: mStudent = new Student();47: mStudent.setId(parser.getAttributeValue(0));48: }49: if (mStudent != null) {50: if ("name".equals(name)) {51: // 获取解析器当前指向元素的下一个文本节点的值52: mStudent.setName(parser.nextText());53: }54: if ("age".equals(name)) {55: // 获取解析器当前指向元素的下一个文本节点的值56: mStudent.setAge(new Short(parser.nextText()));57: }58: if ("sex".equals(name)) {59: // 获取解析器当前指向元素的下一个文本节点的值60: mStudent.setSex(parser.nextText());61: }62: }63: break;64: // 触发结束元素事件65: case XmlPullParser.END_TAG:66: //67: if ("student".equals(parser.getName())) {68: students.add(mStudent);69: mStudent = null;70: }71: break;72: default:73: break;74: }75: eventType = parser.next();76: }77: return students;78: }79:80: }81:
四、运行结果

五、遗留问题及参考文献
Dom和SAX和Pull的适用范围分别是什么?
http://blog.csdn.net/cjjky/article/details/6667744
Android使用pull解析xml的更多相关文章
- Android之Pull解析XML
一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...
- Android中用PULL解析XML
解析XML的方式有DOM,SAX,PULL,那为什么要在Android中使用PULL解析呢?首先来说一下PULL解析的优点,然后再说一下其他两种解析方式的缺点,答案就清晰可见啦. DOM不适合文档较大 ...
- android——使用pull解析xml文件
1.persons.xml 将persons.xml文件放到src目录下.其代码如下: <?xml version='1.0' encoding='UTF-8' standalone='yes' ...
- [android] 采用pull解析xml文件
/***********2016年5月6日 更新**********************/ 知乎:Android 中有哪几种解析 xml 的类,官方推荐哪种 ? 以及它们的原理和区别? 刘吉财: ...
- Android中pull解析XML文件的简单使用
首先,android中解析XML文件有三种方式,dom,sax,pull 这里先讲pull,稍候会说SAX和DOM pull是一种事件驱动的xml解析方式,不需要解析整个文档,返回的值是数值型,是推荐 ...
- Android使用pull解析xml格式的数据
dom解析:基于全文加载的解析方式 sax解析:基于事件的逐行解析方式 pull解析:同sax XmlPullParser //解析xml文件读取短信内容 ...
- 使用PULL解析XML文件
转载博文1:http://blog.csdn.net/wangkuifeng0118/article/details/7313241 XmlPull和Sax类似,是基于流(stream)操作文件,然后 ...
- Android——PULL解析XML
简介 Android中常常使用XML文件保存用户的APP设置信息.因此需要对XML文件的相关操作进行了解.本文将以<学生信息管理系统>为案例背景进行介绍相关的XML解析的介绍,以及其他相关 ...
- Android系列--DOM、SAX、Pull解析XML
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
随机推荐
- DELETE---删除记录
DELETE FROM table_name [WHERE conditions]; 例: DELETE FROM userinfo WHERE name='zhangsan'; 说明 1.不添加条件 ...
- jqery基础知识
选择器按属性,子元素,表单匹配元素 <!doctype html> <html lang="en"> <head> <meta chars ...
- 转载-优秀程序员的十个tips
理解技术债务 技术债务就像信用卡一样,会有很高的利息,时间越长,修复所化的代价就越大.团队应该培养一种保证设计质量的文化,鼓励重构.同时应当鼓励其它有关代码质量的实践. 保持对原理的好奇心 做Andr ...
- 高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)
高吞吐高并发Java NIO服务的架构(NIO架构及应用之一) http://maoyidao.iteye.com/blog/1149015 Java NIO成功的应用在了各种分布式.即时通信和中 ...
- 页面嵌套 Iframe 产生缓存导致页面数据不刷新问题
最近遇到个比较古怪的问题:当页面嵌套多个 Iframe 时会出现 Iframe 里包含的页面无法看到最新的页面信息. 初步解决方案,在 Iframe 指向的页面地址后缀添加一个随机数或者时间戳.这样能 ...
- sql查询结果集根据指定条件排序的方法
oracle认为 null 最大. 升序排列,默认情况下,null值排后面. 降序排序,默认情况下,null值排前面. 有几种办法改变这种情况: (1)用 nvl 函数或decode 函数 将null ...
- WPF简单拖拽功能实现
1.拖放操作有两个方面:源和目标. 2.拖放操作通过以下三个步骤进行: ①用户单击元素,并保持鼠标键为按下状态,启动拖放操作. ②用户将鼠标移到其它元素上.如果该元素可接受正在拖动的内容的类型,鼠标指 ...
- 解压版tomcat设置为系统服务
1.先关闭tomcat,在"开始 "→"运行 "中输入cmd 命令,进入MS-DOS界面 2.进入 到tomcat的bin目录下 (解压版tomcat存放目录, ...
- OpenJudge 2815 城堡问题 / Poj 1164 The Castle
1.链接地址: http://bailian.openjudge.cn/practice/2815/ http://poj.org/problem?id=1164 2.题目: 总时间限制: 1000m ...
- 检测 IE 版本 in Javascript
点击打开链接http://stackoverflow.com/questions/10964966/detect-ie-version-in-javascript <!doctype html& ...