Android使用pull解析xml格式的数据
dom解析:基于全文加载的解析方式 sax解析:基于事件的逐行解析方式 pull解析:同sax
XmlPullParser
//解析xml文件读取短信内容
public static int restoreSms(Context context) {
ArrayList<SmsBean> arrayList = null;
SmsBean smsBean = null;
try{
//1.通过Xml获取一个XmlPullParser对象
XmlPullParser xpp = Xml.newPullParser();
//2.设置XmlPullParser对象的参数,需要解析的是哪个xml文件,设置一个文件读取流
//通过context获取一个资产管理者对象
AssetManager assets = context.getAssets();
//通过资产管理者对象能获取一个文件读取流
InputStream inputStream = assets.open("backupsms.xml");
xpp.setInput(inputStream,"utf-8");
//xpp.setInput(context.openFileInput("backupsms2.xml"), "utf-8");
//3.获取当前xml行的事件类型
int type = xpp.getEventType();
//4.判断事件类型是否是文档结束的事件类型
while(type != XmlPullParser.END_DOCUMENT){
//5.如果不是,循环遍历解析每一行的数据。解析一行后,获取下一行的事件类型
String currentTagName = xpp.getName();
//判断当前行的事件类型是开始标签还是结束标签
switch (type) {
case XmlPullParser.START_TAG:
if(currentTagName.equals("Smss")){
//如果当前标签是Smss,需要初始化一个集合
arrayList = new ArrayList<SmsBean>();
}else if(currentTagName.equals("Sms")){
smsBean = new SmsBean();
smsBean.id = Integer.valueOf(xpp.getAttributeValue(null, "id"));
}else if(currentTagName.equals("num")){
smsBean.num = xpp.nextText();
}else if(currentTagName.equals("msg")){
smsBean.msg = xpp.nextText();
}else if(currentTagName.equals("date")){
smsBean.date = xpp.nextText();
}
break;
case XmlPullParser.END_TAG:
//当前结束标签是Sms的话,一条短信数据封装完成, 可以加入list中
if(currentTagName.equals("Sms")){
arrayList.add(smsBean);
}
break;
default:
break;
}
type = xpp.next();//获取下一行的事件类型
}
return arrayList.size();
}catch (Exception e) {
e.printStackTrace();
}
return 0;
}
最新文章
- Winform绑定数据源的几种方式?
- CAD2010中文版安装问题记录
- 【转载】.NET面试题系列[0] - 写在前面
- HDU 5775 Bubble Sort (线段树)
- Spring SimpleJdbcTemplate Querying examples
- angular ui-route
- C# 操作 Word 修改word的高级属性中的自定义属性2
- 关于Spring的Controller及Struts的Action的多线程的注意
- dedecms织梦如何删除所有的文章?
- [LeetCode] 141&;142 Linked List Cycle I &; II
- java中关于线程间协作所用关键字synchronized,wait,notify的用法
- Ubuntu_16.04_Lamp
- Python学习笔记——基础篇2【第三周】——计数器、有序字典、元组、单(双)向队列、深浅拷贝、函数、装饰器
- iOS动画特效
- webpack打包The &#39;mode&#39; option has not been set,错误提示
- Python——模块——随机模块
- 简单 v.s. 基础
- ④品茶看<;Servlet&;JSP>;-EL表达式
- Linux下安装pymysql
- 洛谷 P1141【BFS】+记忆化搜索+染色
热门文章
- Mysql溯源-任意文件读取&#128123;
- Winform中使用HttpClient与后端api服务进行交互
- c++—通讯录管理系统
- Java初学者作业——使用记事本编写Java程序
- .NET 云原生架构师训练营(责任链模式)--学习笔记
- CentOS7 安装mysql并解决安装慢的问题
- VsCode安装与配置
- 【刷题-LeetCode】154 Find Minimum in Rotated Sorted Array II
- 【记录一个问题】android opencl c++: 使用event.SetCallBack()方法后,在回调函数中要再使用event.wait()才能得到profile信息
- spark中job stage task关系