本文介绍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文件的更多相关文章

  1. Android中pull解析XML文件的简单使用

    首先,android中解析XML文件有三种方式,dom,sax,pull 这里先讲pull,稍候会说SAX和DOM pull是一种事件驱动的xml解析方式,不需要解析整个文档,返回的值是数值型,是推荐 ...

  2. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...

  3. Android——PULL解析XML

    简介 Android中常常使用XML文件保存用户的APP设置信息.因此需要对XML文件的相关操作进行了解.本文将以<学生信息管理系统>为案例背景进行介绍相关的XML解析的介绍,以及其他相关 ...

  4. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  5. pull解析xml文件

    pull解析xml文件 先自己写一个xml文件,存一些天气信息 拿到xml文件 InputStream is = getClassLoader().getResourceAsStream(" ...

  6. android——使用pull解析xml文件

    1.persons.xml 将persons.xml文件放到src目录下.其代码如下: <?xml version='1.0' encoding='UTF-8' standalone='yes' ...

  7. [android] 采用pull解析xml文件

    /***********2016年5月6日 更新**********************/ 知乎:Android 中有哪几种解析 xml 的类,官方推荐哪种 ? 以及它们的原理和区别? 刘吉财: ...

  8. Android SAX、DOM、Pull解析xml文件剖析与案例讲解

    XML介绍 XML(Extensible Markup Language) 即可扩展标记语言,与HTML一样,都是SGML(Standard Generalized Markup Language,标 ...

  9. Android程序解析XML文件的方法及使用PULL解析XML案例

    一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...

随机推荐

  1. python生成随机密码

    有时候我们会想生成一个随机密码,这样我们通过Python中的一些随机方法,就可生成我们任意长度和复杂度的密码,代码如下: # -*- coding=utf-8 -*- import random im ...

  2. EF 中事务的书写

    在EF 中怎么使用事务? 这个问题纠结了我好久,直到有人跟我一起讨论,我和同事一起讨论查资料. 查的好多资料都是使用 using (TransactionScope scope = new Trans ...

  3. MS SQL中使用UPDATE ... INNER JOIN ...

    昨天的SQL编程中,有使用到一个方法,就是把一个表某一字段更新至另一个表的字段中去. 实现这个方法,Insus.NET有尝试了几个方法,下面一一分享出来,让大家参考参考. 下面的数据只是模拟了,形式与 ...

  4. C#中使用Sql对Excel条件查询

    如何在C#中实现对Excel的条件查询呢? 在使用Sql条件语句对Excel进行查询时,遇到"至少一个参数没有被指定值"的问题,如何解决? 使用OleDbConnection对象创 ...

  5. C#DateTimePicker控件问题

    DateTimPicker控件在遇到29这样特殊的日期,选择时可能会出现 解决方案:在属性中把Value值设置为除29日外的其他日期或者在代码中直接设置Value值:DateTimePicker1 = ...

  6. 孙鑫MFC学习笔记7:对话框编程(上)

    1.DoModal创建模态对话框 2.Create创建非模态对话框(需要用ShowWindow显示出来) 模态:对话框显示,程序会暂停,直到对话框关闭 非模态:对话框显示,程序继续执行 3.对于模态对 ...

  7. Delphi 收藏

    日前整理仓库,翻出了一些 Delphi 产品,以前购买的 Delphi 都有实体产品,包含说明书.光碟片.还有一些广告文宣,而且相当厚实,版本的演进,从外包装也能感受到,到目前的 XE5 版,只剩一个 ...

  8. 由一个异常开始思考springmvc参数解析

    首先记录一下异常,以及异常出现的原因和解决方案 异常主要信息: -- ::, ERROR [.jsp] - Name for argument type [java.lang.String] not ...

  9. Oracle 数据库 基础学习 (一) SQL基本知识

    Oracle 从零开始,不知所措.要掌握一种技能,最好的方式是先学会怎么使用它,然后再深入学习,先有样子,再有技术.   一,什么是数据库? 为什么需要数据库? 数据库实质上是一个信息的列表,或者是一 ...

  10. Java异常的中断和恢复

    中断:抛出一个异常类的实例而终止现有程序的执行:恢复:不是抛出一个异常类的实例,而是调用一个用于解决问题的方法或就地解决问题. 在Java中,对那些要调用方法的客户程序员,我们要通知他们可能从自己的方 ...