android解析xml (pull)
1. xml
<persons>
<person id="18">
<name>furong</name>
<age>20</age>
</person>
</persons>
2. 解析
public class PersonService {
//上下文
private Context context;
//生成构建方法
public PersonService(Context context) {
this.context = context;
}
// 把person.xml的输入流解析转化成List集合
public List<Person> getPersons(String filename) {
//资源文件
AssetManager manager = context.getAssets();
try {
InputStream iStream = manager.open(filename);
// android使用pull解析器
XmlPullParser parser = Xml.newPullParser();
// 设置解析器参数
parser.setInput(iStream, "utf-8");
// 获取解析器的事件类型
int type = parser.getEventType();
Person person = null;
List<Person> persons = new ArrayList<Person>();
while (type != XmlPullParser.END_DOCUMENT) {
if (type == XmlPullParser.START_TAG) {
if ("person".equals(parser.getName())) {
person = new Person();
int id = Integer.parseInt(parser.getAttributeValue(0));
person.setId(id);
} else if ("name".equals(parser.getName())) {
String name = parser.nextText();
person.setName(name);
} else if ("age".equals(parser.getName())) {
int age = parser.nextTag();
person.setAge(age);
}
}
if (type == XmlPullParser.END_TAG) {
if ("person".equals(parser.getName())) {
persons.add(person);
}
}
type = parser.next();
}
return persons;
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(context, "获取person.xml失败", Toast.LENGTH_SHORT).show();
return null;
}
}
}
XmlPullParser:该解析器是一个在org.xmlpull.v1中定义的解析功能的接口
读取到xml的声明返回 START_DOCUMENT; 结束返回 END_DOCUMENT ; 开始标签返回 START_TAG;结束标签返回 END_TAG; 文本返回 TEXT
3. 生成
public boolean savePerson(List<Person> persons) {
try {
//初始化XML序列化器
XmlSerializer serializer = Xml.newSerializer();
//在SD卡上创建文件,需要添加写外部存储设备的权限
File file = new File(Environment.getExternalStorageDirectory(), "person.xml");
FileOutputStream fileOutputStream = new FileOutputStream(file);
serializer.setOutput(fileOutputStream, "utf-8");
serializer.startDocument("utf-8", true);
serializer.startTag(null, "persons");
for (Person person : persons) { //遍历集合
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId() + ""); //加空白字符串转化成String
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge() + "");
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
//关闭流
fileOutputStream.flush();
fileOutputStream.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
XmlSerializer:它是一个接口,定义了XML信息集的序列
android解析xml (pull)的更多相关文章
- Android 解析XML—pull解析方式
在Android中,常见的XML解析器分别为SAX解析器.DOM解析器和PULL解析器,其中PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部 ...
- android解析XML总结(SAX、Pull、Dom三种方式) <转载>
android解析XML总结(SAX.Pull.Dom三种方式) http://www.cnblogs.com/JerryWang1991/archive/2012/02/24/2365507.htm ...
- android解析xml文件的方式
android解析xml文件的方式 作者:东子哥 ,发布于2012-11-26,来源:博客园 在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xm ...
- Android解析XML(PULL方式)
PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDocu ...
- Android解析xml文件-采用DOM,PULL,SAX三种方法解析
解析如下xml文件 <?xml version="1.0" encoding="UTF-8"?> <persons> <perso ...
- [android]解析XML文件的方法有三种:PULL,DOM,SAM
PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDocu ...
- android 解析XML方式(三)
上一节中,我们使用SAX方式解析xml文档, SAX方式是基于事件驱动的.当然android的事件机制是基于回调函数的.在这一节中,我们用另外一种方式解析xml文档,这种方式也是基于事件驱动的,与SA ...
- android 解析XML方式(一)
在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xml,xml是与平台无关的特性,被广泛运用于数据通信中,那么在android中如何解析xml文件数据呢? ...
- Android解析XML
在Android平台上可以使用Simple API for XML(SAX) . Document Object Model(DOM)和Android附带的pull解析器解析XML文件. 下面是本例子 ...
随机推荐
- LOJ#107. 维护全序集(FHQ Treap)
题面 传送门 题解 板子,没啥好说的 //minamoto #include<bits/stdc++.h> #define R register #define inline __inli ...
- Mybatis「MySQL-Oracle」 中主键自动生成 <selectKey> 序列化
有时候我们不仅仅是通过返回 int 影响行数来确定数据是否插入成功就行了,因为我们总是会用到这个刚刚插入的自增主键,比如主子表入库,子表需要主表的 id,那这个时候我们再去数据库查就显得有点 low ...
- Pandas | 07 函数应用
要将自定义或其他库的函数应用于Pandas对象,有三个重要的方法,下面来讨论如何使用这些方法.使用适当的方法取决于函数应用于哪个层面(DataFrame,行或列或元素). 表合理函数应用:pipe() ...
- 《Machine Learning - 李宏毅》视频笔记(完结)
https://www.youtube.com/watch?v=CXgbekl66jc&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49 https://www. ...
- python总结一
1. python中的而标准数据类型: number(数字) string(字符串) list(列表) tuple(元祖) dic(字典) 其中数字类型有: python支持四种不同的数字类型: in ...
- ROS+gre over ipv6,在ipv6的基础上建立GRE隧道
感谢群众大神 @镜花水月全程技术支持.感谢! 环境: 1.阿里云华北5,申请ipv6测试,申请ECS带ipv6公网ip 2.为了便于测试便捷,在vultr创建2.5美元的vps,带ipv6 对了,测试 ...
- java基础 类 & 继承
类 在Java中,类文件是以.java为后缀的代码文件,在每个类文件中可以有多个类,但是最多只允许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在 ...
- mac系统中怎么打开rar/zip等压缩文件?
平常使用mac的同学们,可能经常要接受下别人发过来的rar文件,可惜的时mac os x系统默认是不能打开rar文件(不知道以后苹果会支持rar不?),那么我们该如何去解圧rar文件,接下来我将介绍. ...
- 【技术博客】nginx服务器的https协议实现
在本学期软件工程的Alpha和Beta阶段,我们的服务器部署都是使用基础的http协议,http在网络路由间的信息转发都为明文,这对我们网站的账户密码登录来说很不安全,因此在Gamma阶段我们实现了h ...
- sklearn保存模型的两种方式
sklearn 中模型保存的两种方法 一. sklearn中提供了高效的模型持久化模块joblib,将模型保存至硬盘. from sklearn.externals import joblib # ...