博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Pull解析XML文档
阅读量:4104 次
发布时间:2019-05-25

本文共 3068 字,大约阅读时间需要 10 分钟。

转载自:

 

Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。Pull解析和Sax解析不一样的地方有

(1)pull读取xml文件后触发相应的事件调用方法返回的是数字

(2)pull可以在程序中控制想解析到哪里就可以停止解析。看实例:

book.xml如下:

thinking in java
85.5
Spring in Action
39.0

 

Pull解析的代码如下PullParseService.java

import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import android.util.Xml;import com.xtlh.cn.entity.Book;public class PullParseService {	public static List
getBooks(InputStream inputStream) throws Exception{ List
books = null; Book book = null; XmlPullParser parser = Xml.newPullParser(); parser.setInput(inputStream, "UTF-8"); int event = parser.getEventType();//产生第一个事件 while(event!=XmlPullParser.END_DOCUMENT){ switch(event){ case XmlPullParser.START_DOCUMENT://判断当前事件是否是文档开始事件 books = new ArrayList
();//初始化books集合 break; case XmlPullParser.START_TAG://判断当前事件是否是标签元素开始事件 if("book".equals(parser.getName())){//判断开始标签元素是否是book book = new Book(); book.setId(Integer.parseInt(parser.getAttributeValue(0)));//得到book标签的属性值,并设置book的id } if(book!=null){ if("name".equals(parser.getName())){//判断开始标签元素是否是name book.setName(parser.nextText()); }else if("price".equals(parser.getName())){//判断开始标签元素是否是price book.setPrice(Float.parseFloat(parser.nextText())); } } break; case XmlPullParser.END_TAG://判断当前事件是否是标签元素结束事件 if("book".equals(parser.getName())){//判断结束标签元素是否是book books.add(book);//将book添加到books集合 book = null; } break; } event = parser.next();//进入下一个元素并触发相应事件 }//end while return books; }}

 

public class Book {	private int id;	private String name;	private float price;	public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public float getPrice() {		return price;	}	public void setPrice(float price) {		this.price = price;	}	@Override	public String toString(){		return this.id+":"+this.name+":"+this.price;	}}

 测试使用的是android的单元测试,代码如下:

import java.io.InputStream;import java.util.List;import android.test.AndroidTestCase;import android.util.Log;import com.xtlh.cn.entity.Book;import com.xtlh.cn.service.PullParseService;public class testPullParseService extends AndroidTestCase{	private static final String TAG = "testPullParseService";	public void testPull() throws Exception{		InputStream input = this.getClass().getClassLoader().getResourceAsStream("book.xml");		PullParseService pull = new PullParseService();		List
books = pull.getBooks(input); for(Book book : books){ Log.i(TAG,book.toString()); } }}
 

要使用android的单元测试,需要在AndroidManifest.xml文件中加入声明,AndroidManifest.xml如下:

 

 Pull解析可以用于很多场合,例如接受google天气,rss新闻等,希望对大家有帮助!

 

 

你可能感兴趣的文章
Windows中cmd操作mysql
查看>>
《As3 Expert》_1 :数组操作符的用途,如何访问不可访问的东东?
查看>>
《AS3 Expert》_2:FB与FD代码智能提示的隐匿陷阱
查看>>
《AS3 Expert》_3:为什么for不能有序遍历数组的所有元素?
查看>>
AS3实用函数、AS3常用算法大全
查看>>
AS3游戏中可视对象上限及位图相关的内存消耗实测
查看>>
C++继承经典案例
查看>>
C++虚拟继承解决菱形继承的二义性
查看>>
MySql面试题
查看>>
VS hide switch
查看>>
Win下命令行编译环境
查看>>
FB小图标的含义
查看>>
static_cast作用
查看>>
线程与线程回调函数
查看>>
AS3组件
查看>>
AS3有用组件库
查看>>
彻底理解C/C++调用约定
查看>>
#pragma用法归纳
查看>>
VS2008常用快捷键
查看>>
C++类中的枚举
查看>>