Android编程使用pull方式解析xml格式文件的方法详解
作者:青蛙小王子 时间:2022-08-26 14:18:35
本文实例讲述了Android编程使用pull方式解析xml格式文件的方法。分享给大家供大家参考,具体如下:
上次已经说过使用Android sax解析xml,实际上还可以使用pull解析xml.这样的方式效率也是比较高的。pull不仅可以在Android上使用也可以用在javaee里面,需要的就是pull的jar包。这次的xml也使用上次的那个,如下所示
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="01">
<name>will</name>
<age>21</age>
</person>
<person id="02">
<name>will2</name>
<age>22</age>
</person>
</persons>
下面就来写一个解析xml的类,解析的流程如下
(1)取得pull解析器
(2)设置解析器的输入流
(3)产生第一个事件
(4)开始解析
(5)解析结束
package org.lxh.impl;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.lxh.vo.Person;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Log;
import android.util.Xml;
public class Parse2 {
public List<Person> getPersons(InputStream in) throws Throwable{
Person p=null;
List<Person> persons=null;
XmlPullParser parser=Xml.newPullParser();
parser.setInput(in, "UTF-8");
int event=parser.getEventType();//产生第一个事件
while(event!=XmlPullParser.END_DOCUMENT){ //如果不是文档结束事件
switch(event){
case XmlPullParser.START_DOCUMENT:
persons=new ArrayList<Person>(); //在文档的开始实例化集合
break;
case XmlPullParser.START_TAG:
String name=parser.getName();//取得当前解析器指向的元素名称
if("person".equals(name)){
p=new Person();
p.setId(parser.getAttributeValue(0));
}
if(p!=null){
if("name".equals(name)){
p.setName(parser.nextText()); //取得当前解析器指向的下一个元素的文本节点
}
if("age".equals(name)){
p.setAge(Integer.parseInt(parser.nextText()));
}
}
break;
case XmlPullParser.END_TAG:
if("person".equals(parser.getName())){ //person标签结束就把数据存入集合
persons.add(p);
//p=null;
}
break;
}
event=parser.next();
}
return persons;
}
}
这样的解析比起sax应该比较简单了,单元测试也用昨天那个只是少做了修改。下面看一下效果截图
PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线XML/JSON互相转换工具:
http://tools.jb51.net/code/xmljson
在线格式化XML/在线压缩XML:
http://tools.jb51.net/code/xmlformat
XML在线压缩/格式化工具:
http://tools.jb51.net/code/xml_format_compress
XML代码在线格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat
希望本文所述对大家Android程序设计有所帮助。
标签:Android,pull,xml
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Spring之spring-context-indexer依赖详解
2023-11-23 12:21:41
![](https://img.aspxhome.com/file/2023/4/59024_0s.jpg)
微信小程序微信登录的实现方法详解(JAVA后台)
2023-08-29 12:37:25
![](https://img.aspxhome.com/file/2023/0/58370_0s.jpg)
Android下拉列表选项框及指示箭头动画
2022-09-28 04:08:15
![](https://img.aspxhome.com/file/2023/7/90157_0s.png)
用java WebSocket做一个聊天室
2021-11-30 00:39:55
![](https://img.aspxhome.com/file/2023/2/60392_0s.jpg)
Java的MyBatis框架中实现多表连接查询和查询结果分页
2022-10-29 08:49:21
![](https://img.aspxhome.com/file/2023/7/72397_0s.png)
JVM Client和Server端有什么区别
2023-08-05 22:49:53
![](https://img.aspxhome.com/file/2023/5/64385_0s.png)
Spring实战之使用注解实现声明式事务操作示例
2021-08-19 07:16:07
Android控件之ListView用法实例详解
2023-09-11 00:39:26
![](https://img.aspxhome.com/file/2023/0/90130_0s.png)
IDEA启动tomcat控制台中文乱码问题的解决方法(100%有效)
2021-06-25 10:45:23
![](https://img.aspxhome.com/file/2023/9/62699_0s.jpg)
Android开发中MotionEvent坐标获取方法分析
2022-03-29 02:43:42
![](https://img.aspxhome.com/file/2023/0/93280_0s.png)
JavaWeb实现文件上传与下载的方法
2023-12-23 04:42:56
C#的TimeSpan案例详解
2023-11-20 11:34:52
![](https://img.aspxhome.com/file/2023/7/88317_0s.png)
Java实现FTP上传到服务器
2022-10-07 10:28:58
JAVA实现账户取款和存款操作
2023-08-22 16:31:45
spring cloud zuul修改请求url的方法
2022-09-03 01:44:19
Ireport的安装与使用教程
2021-08-08 00:16:43
![](https://img.aspxhome.com/file/2023/2/84632_0s.png)
SpringBoot 如何使用RestTemplate发送Post请求
2022-03-03 09:35:47
![](https://img.aspxhome.com/file/2023/7/66527_0s.png)
C# 异步多线程入门基础
2022-01-19 05:23:05
![](https://img.aspxhome.com/file/2023/8/85668_0s.png)
Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例
2021-07-19 04:41:18
Mybatis结果生成键值对的实例代码
2023-11-28 15:50:58