Android pull解析xml文件
本文介绍android中使用pull来解析xml文件
先自己写一个xml文件,存一些天气信息
<?xml version="1.0" encoding="UTF-8"?>
<weather>
<city>
<name>广州</name>
<temp>35</temp>
<pm>23</pm>
</city>
<city>
<name>上海</name>
<temp>30</temp>
<pm>26</pm>
</city>
<city>
<name>北京</name>
<temp>29</temp>
<pm>55</pm>
</city>
</weather>
在定义一个City类
package com.wuyudong.pullparser.domain;
public class City {
private String name;
private String tmp;
private String pm;
@Override
public String toString() {
return "City [name=" + name + ", tmp=" + tmp + ", pm=" + pm + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTmp() {
return tmp;
}
public void setTmp(String tmp) {
this.tmp = tmp;
}
public String getPm() {
return pm;
}
public void setPm(String pm) {
this.pm = pm;
}
}
拿到xml文件
InputStream is = getClassLoader().getResourceAsStream("weather.xml");
拿到pull解析器
XmlPullParser xp = Xml.newPullParser();
开始解析
拿到指针所在当前节点的事件类型
int type = xp.getEventType();
* 事件类型主要有五种
* START_DOCUMENT:xml头的事件类型
* END_DOCUMENT:xml尾的事件类型
* START_TAG:开始节点的事件类型
* END_TAG:结束节点的事件类型
* TEXT:文本节点的事件类型
如果获取到的事件类型不是END_DOCUMENT,就说明解析还没有完成,如果是,解析完成,while循环结束
while(type != XmlPullParser.END_DOCUMENT)
* 当我们解析到不同节点时,需要进行不同的操作,所以判断一下当前节点的name
* 当解析到weather的开始节点时,new出list
* 当解析到city的开始节点时,创建city对象,创建对象是为了更方便的保存即将解析到的文本
* 当解析到name开始节点时,获取下一个节点的文本内容,temp、pm也是一样
case XmlPullParser.START_TAG:
//获取当前节点的名字
if("weather".equals(xp.getName())){
citys = new ArrayList<City>();
}
else if("city".equals(xp.getName())){
city = new City();
}
else if("name".equals(xp.getName())){
//获取当前节点的下一个节点的文本
String name = xp.nextText();
city.setName(name);
}
else if("temp".equals(xp.getName())){
String temp = xp.nextText();
city.setTemp(temp);
}
else if("pm".equals(xp.getName())){
String pm = xp.nextText();
city.setPm(pm);
}
break;
当解析到city的结束节点时,说明city的三个子节点已经全部解析完了,把city对象添加至list
case XmlPullParser.END_TAG:
if("city".equals(xp.getName())){
citys.add(city);
}
完整代码如下:
package com.wuyudong.pullparser; import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser;
import com.wuyudong.pullparser.domain.City; import android.os.Bundle;
import android.app.Activity;
import android.util.Xml;
import android.view.View; public class MainActivity extends Activity { List<City> citys; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void click(View v) {
// 得到xml文件的输入流
InputStream is = getClassLoader().getResourceAsStream("weather.xml"); // 获取pull解析器
XmlPullParser xp = Xml.newPullParser();
try {
xp.setInput(is, "utf-8");
// 获取当前节点的事件类型
int type = xp.getEventType();
City city = null;
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
// 获取当前节点的名字
if ("weather".equals(xp.getName())) {
citys = new ArrayList<City>();
} else if ("city".equals(xp.getName())) {
city = new City();
} else if ("name".equals(xp.getName())) {
// 获取当前节点的下一个节点的文本
String name = xp.nextText();
// 把文本保存至对象
city.setName(name);
} else if ("temp".equals(xp.getName())) {
String temp = xp.nextText();
city.setTmp(temp);
} else if ("pm".equals(xp.getName())) {
String pm = xp.nextText();
city.setPm(pm);
}
break;
case XmlPullParser.END_TAG:
if ("city".equals(xp.getName())) {
citys.add(city);
}
break; default:
break;
}
// 把指针移动到下一个节点,并且返回该节点的事件类型
type = xp.next();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (City city : citys) {
System.out.println(city.toString());
} } }
运行程序结果如图:

Android pull解析xml文件的更多相关文章
- Android中pull解析XML文件的简单使用
首先,android中解析XML文件有三种方式,dom,sax,pull 这里先讲pull,稍候会说SAX和DOM pull是一种事件驱动的xml解析方式,不需要解析整个文档,返回的值是数值型,是推荐 ...
- Android -- 创建XML文件对象及其序列化, pull解析XML文件
1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...
- Android——PULL解析XML
简介 Android中常常使用XML文件保存用户的APP设置信息.因此需要对XML文件的相关操作进行了解.本文将以<学生信息管理系统>为案例背景进行介绍相关的XML解析的介绍,以及其他相关 ...
- 使用XML序列化器生成XML文件和利用pull解析XML文件
首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...
- pull解析xml文件
pull解析xml文件 先自己写一个xml文件,存一些天气信息 拿到xml文件 InputStream is = getClassLoader().getResourceAsStream(" ...
- 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 SAX、DOM、Pull解析xml文件剖析与案例讲解
XML介绍 XML(Extensible Markup Language) 即可扩展标记语言,与HTML一样,都是SGML(Standard Generalized Markup Language,标 ...
- Android程序解析XML文件的方法及使用PULL解析XML案例
一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...
随机推荐
- msvc2013编译qt5.6源码
1.回顾 说起到qt的编译,真是领人痛心啊,不仅编译选项繁多,而且编译时间比较久,总是能使想编译qt源码的人望而却步,呵呵...我就是其中一个,不知道从什么时候开始就想着把qt的源码编译一下,也尝试过 ...
- postgres中的中文分词zhparser
postgres中的中文分词zhparser postgres中的中文分词方法 基本查了下网络,postgres的中文分词大概有两种方法: Bamboo zhparser 其中的Bamboo安装和使用 ...
- [译]学习IPython进行交互式计算和数据可视化(四)
第三章 使用Python进行数字计算 尽管IPython强大的shell和扩展后的控制台能被任何Python程序员使用,但是这个工具最初是科学奖为科学家设计的.它的主要设计目标就是为使用Python进 ...
- 通过原生JS实现为元素添加事件
自己写了一个为元素添加事件的方法,并封装到对象中. 说明: id : 目标元素的ID type: 事件的类型,注意的是不能加on fn:事件处理程序 isBubble :规定事件流 代码: var b ...
- jquery.tmpl.js 模板引擎用法
1.0 引入: <script src="/js/jquery.tmpl.min.js"></script> 2.0 模板: <script type ...
- Castle ActiveRecord框架学习(一)
一.Active Record(活动记录)模式 Active Record是业务逻辑层中(<企业应用架构模式>将该模式归为数据源模式)常用的一种框架模式,尤其在底层数据库模型匹配业务模型时 ...
- DIP依赖倒置原则
一.定义 1.高层模块不应该依赖低层模块,二者都应该依赖抽象 2.抽象不应该依赖于细节.细节应该依赖于抽象 二.层次化 1.简单介绍 结构良好的面向对象架构都具有清晰的层次定义,每个层次通过一个定义良 ...
- asp.net开发与web标准的冲突问题
Visual Studio .net从2003到现在的2008,一路走来慢慢强大……从以前的vs2003能自动改乱你的html代码到现在在vs2008中都能直接对html代码进行w3c标准验证并提示了 ...
- 第 29 章 CSS3 弹性伸缩布局[下]
学习要点: 1.新版本 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS3 提供的用来实现未来响应式弹性伸缩布局方案,这里做一个初步的了解. 一.新版本 新版本的 Flexbox 模型是 201 ...
- HDU 5091---Beam Cannon(线段树+扫描线)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5091 Problem Description Recently, the γ galaxies bro ...