`
sinye
  • 浏览: 219058 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android Pull解析xml

阅读更多

Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。Pull解析和Sax解析不一样的地方有(1)pull读取xml文件后触发相应的事件调用方法返回的是数字(2)pull可以在程序中控制想解析到哪里就可以停止解析。看实例:

book.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book id="12">
		<name>thinking in java</name>
		<price>85.5</price>
	</book>
	<book id="15">
		<name>Spring in Action</name>
		<price>39.0</price>
	</book>
</books>

 

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<Book> getBooks(InputStream inputStream) throws Exception{
		List<Book> 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<Book>();//初始化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;
	}
}

 里面使用到的Book.java类

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<Book> books = pull.getBooks(input);
		for(Book book : books){
			Log.i(TAG,book.toString());
		}
	}
}

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

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.xlth.cn.demo"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
    <uses-library android:name="android.test.runner" />
        <activity android:name=".PullParseDemo"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="7" />
	<instrumentation android:name="android.test.InstrumentationTestRunner"
	  android:targetPackage="com.xlth.cn.demo" android:label="Tests for My App" />
</manifest> 

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

分享到:
评论
10 楼 liuchao_vip 2012-08-06  
9 楼 a455642158 2012-05-29  
Pull解析和Sax解析不一样的地方有(1)pull读取xml文件后触发相应的事件调用方法返回的是数字(2)pull可以在程序中控制想解析到哪里就可以停止解析。
以上代码体现了这些不一样的地方吗……?
8 楼 ableouou 2010-11-15  
恩 不错 之前是依靠第三方jar来做,如果能有自带的比较方便
7 楼 Qaohao 2010-11-10  
android手机上对sax,dom解析支持有些问题,用pull就不一样了。
6 楼 lc228 2010-11-09  
正在学习ANDROID,长见识了,谢谢!
5 楼 0704681032 2010-11-08  
正在学习android,学习了...
4 楼 happy200318 2010-10-17  
学习了,平时都用的SAX,感觉还是pull解析简单吧
3 楼 jqyp324 2010-09-24  
不过建议在做解析时定义一个存临时标签的变量,这样就不会出现莫名其妙的问题了
2 楼 lizhengjun 2010-09-21  
这样效率的确比较高,但从编程的方便性而言,用XPath解析是最好的,但效率就不如Pull和SAX了,而且Android目前也还没有实现对XPath的支持。
1 楼 sky_guang 2010-09-20  
很有用的资料,而且pull解析应该在编译时就做过了优化,速度比较快

相关推荐

    android pull解析xml源码

    "Android pull解析xml源码"这个主题聚焦于使用Android的XML Pull解析器来理解和操作XML文档。Pull解析器是一种事件驱动的解析方法,与DOM(Document Object Model)和SAX(Simple API for XML)不同,它不需要将整个...

    Android PULL解析XML

    总结,本教程介绍了如何在Android中使用PULL解析XML,以及如何结合ButterKnife进行视图绑定。PULL解析提供了高效且内存友好的方式处理XML数据,而ButterKnife则简化了UI组件的管理,两者结合能有效提升开发效率。...

    android之Pull解析XML文件

    总结,Android的Pull解析XML文件是一种高效、节省资源的解析方式,适用于网络通信中的数据交换。通过创建Pull解析器实例,监听XML事件,以及适当优化,开发者可以轻松处理XML数据,实现更流畅的用户体验。在实际开发...

    android中使用PULL解析XML

    **使用PULL解析XML的步骤** 1. **引入库** 首先,在Android项目中,我们需要引入`xmlpull.org`的库,这个库已经被包含在Android SDK中,无需额外下载。在代码中,我们可以通过以下方式获取到PULL解析器: ```java ...

    Android Pull 解析 XML.doc

    【Android Pull解析XML】 在Android开发中,处理XML数据时,常常会用到两种轻量级的解析方式:SAX解析和Pull解析。本篇主要介绍Android中的Pull解析XML,这是一种事件驱动的解析方式,允许应用程序按需读取XML文档...

    Android中,使用SAX和PULL解析天气预报XML

    该文章详细介绍了在Android环境下如何使用SAX和PULL解析XML,包括代码示例和步骤说明,对于初学者来说非常有帮助。 最后,压缩包中的"Weather"文件很可能是示例的天气预报XML数据。通过实际解析这个文件,你可以更...

    android xml pull解析示例

    在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...

    使用Android自带的XML解析器PULL解析器简单的解析xml

    Android系统提供了一种轻量级的XML解析方式——PULL解析器(Pull Parser),它适用于处理大型XML文档,因为它不需要像DOM解析器那样一次性加载整个XML文档到内存中。PULL解析器通过事件驱动的方式,按需解析XML文档...

    Pull解析xml源码导入即可用

    本文将深入探讨Android中的Pull解析XML技术,以及如何利用模板快速实现XML的解析。 首先,理解XML Pull解析器的工作原理是至关重要的。在Android中,XML Pull解析是一种轻量级处理XML文档的方式,它允许应用移动...

    android使用pull 解析xml文件源码

    pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...

    xml PULL解析的一个小例子

    在Android开发中,由于其轻量级和高效的特点,XML Pull解析器成为处理XML文档的一种常见方法。本DEMO主要展示了如何在Android项目中使用XML Pull解析技术。 XML Pull解析器的工作方式是基于事件驱动的,它会读取XML...

    在android中使用pull解析xml文件

    本文将深入探讨如何在Android中使用Pull解析器解析XML文件。 一、XML Pull解析器简介 XML Pull解析器(XML Pull API)是一种基于事件驱动的解析模型,它不需预先加载整个XML文档,而是逐行读取,当遇到特定的XML...

    android SAX PULL 解析XML文件 代码 详解

    总之,Android提供了SAX和PULL两种解析XML的手段,开发者可以根据具体情况灵活选择。在内存有限或者需要高效处理大量XML数据的情况下,SAX可能是更好的选择;而在追求简洁代码和快速开发的场合,PULL解析则更为便捷...

    Android 封装pull解析xml

    以下是一些关于封装Pull解析XML的关键知识点: 1. **创建XMLPullParser实例**: Android系统提供了`XmlPullParserFactory`类,通过`newInstance()`方法创建XMLPullParser的工厂对象,然后使用`newPullParser()`...

    pull解析xml文件

    pull解析xml文件

    Android 生成和PULL解析xml

    本文将深入探讨如何在Android中生成XML文件以及如何使用PULL解析器来解析XML数据。 首先,我们来看一下如何在Android中生成XML文件。生成XML文件通常涉及创建一个XMLWriter对象,然后通过调用其方法来添加元素、...

    Pull解析xml Android

    "Pull解析xml Android"这个主题聚焦于Android平台下使用Pull解析器处理XML数据的方法。 Pull解析(XMLPullParser)是Android提供的一种轻量级、低内存消耗的XML解析方式。它不同于DOM解析器(将整个XML文档加载到...

    Android利用pull生成xml文件

    总的来说,Android的Pull解析器不仅用于解析XML,还能用于生成XML文件,这在某些场景下非常有用,例如自定义数据格式的存储或网络通信中的数据序列化。通过Pull解析器生成XML,开发者可以精确地控制XML的结构和内容...

    Android ReadXmlByPull 使用Pull解析Xml文件.rar

    综上所述,Android中的Pull解析器提供了一种高效、低内存消耗的解析XML的方式。通过创建解析器、设置输入源、处理事件以及异常处理,开发者可以轻松地读取和解析XML文件。在实际应用中,可以根据具体需求调整解析...

    Pull 解析xml

    "Pull解析XML"是Android系统中处理XML文档的一种高效方法,相较于DOM(Document Object Model)和SAX(Simple API for XML),Pull解析器在内存占用和性能上有显著优势,尤其适合于移动设备资源有限的环境。...

Global site tag (gtag.js) - Google Analytics