Android编程使用pull方式解析xml格式文件的方法详解
时间:2022-07-27
本文章向大家介绍Android编程使用pull方式解析xml格式文件的方法详解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例讲述了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.zalou.cn/code/xmljson
在线格式化XML/在线压缩XML: http://tools.zalou.cn/code/xmlformat
XML在线压缩/格式化工具: http://tools.zalou.cn/code/xml_format_compress
XML代码在线格式化美化工具: http://tools.zalou.cn/code/xmlcodeformat
希望本文所述对大家Android程序设计有所帮助。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 做一个简单的京东购物栏
- 解决Elasticsearch SQL命令行启动报错 ./x-pack-env: No such file or directory
- MySql 入门到精通-sql查询语句的执行过程,你真的知道吗?
- 用 float 存储金额,老板说损失从工资里扣!
- 分布式追踪实战
- python的接班者之coconut
- Docker 垃圾回收机制补充
- 通过docker image 获取到 dockerfile
- Tensorflow2.0实现简单的RNN文本分析
- 利用Tensorflow2.0实现手写数字识别
- PyTorch,TensorFlow和NumPy中Stack Vs Concat | PyTorch系列(二十四)
- 为什么大家都说“SELECT *”效率低?
- 手把手教你如何搭建一套GPS定位系统平台
- [较难]LeetCode-4.寻找两个正序数组的中位数 利用数组扩充和二分法切割思想实现
- Go Errors 错误处理