Android中使用PULL方式解析XML文件

原创 2011年08月07日 23:24:06

         Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。

         下面我们通过Demo例子来介绍如何使用PULL机制来解析XML文件。先看下如下工程的目录结构:

按以下步骤进行操作:

[1] 新建一个XML文件,命名为student.xml。同时把XML文件放置到assets目录下。student.xml文件的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<students>
	<student id="20110806100">
		<name>小明</name>
		<age>22</age>
		<sex>男</sex>
	</student>
	<student id="20110806101">
		<name>小李</name>
		<age>24</age>
		<sex>男</sex>
	</student>
	<student id="20110806102">
		<name>小丽</name>
		<age>21</age>
		<sex>女</sex>
	</student>
</students>


[2] 根据XML文件中的节点目录,创建一个相对应的实体类,来保存解析的相应信息。在包:com.andyidea.entity下新建Student.java类。

package com.andyidea.entity;

public class Student {
	
	private String id;
	private String name;
	private int age;
	private String sex;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}

}


[3] 定义一个使用PULL解析XML文件的工具类:ParserByPULL.java。

package com.andyidea.util;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.util.Xml;

import com.andyidea.entity.Student;

public class ParserByPULL {
	
    //采用XmlPullParser来解析XML文件  
    public static List<Student> getStudents(InputStream inStream) throws Throwable 
    {  
        List<Student> students = null;  
        Student mStudent = null;  
        
        //========创建XmlPullParser,有两种方式=======
        //方式一:使用工厂类XmlPullParserFactory
		XmlPullParserFactory pullFactory = XmlPullParserFactory.newInstance();
		XmlPullParser parser = pullFactory.newPullParser();
		//方式二:使用Android提供的实用工具类android.util.Xml
        //XmlPullParser parser = Xml.newPullParser();  
        
        //解析文件输入流  
        parser.setInput(inStream, "UTF-8");  
        //产生第一个事件  
        int eventType = parser.getEventType();  
        //只要不是文档结束事件,就一直循环  
        while(eventType!=XmlPullParser.END_DOCUMENT)  
        {  
            switch (eventType)   
            {  
                //触发开始文档事件  
                case XmlPullParser.START_DOCUMENT:  
                	students = new ArrayList<Student>();  
                    break;  
                //触发开始元素事件  
                case XmlPullParser.START_TAG:  
                    //获取解析器当前指向的元素的名称  
                    String name = parser.getName();  
                    if("student".equals(name))  
                    {  
                        //通过解析器获取id的元素值,并设置student的id  
                        mStudent = new Student();  
                        mStudent.setId(parser.getAttributeValue(0));  
                    }  
                    if(mStudent!=null)  
                    {  
                        if("name".equals(name))  
                        {  
                            //获取解析器当前指向元素的下一个文本节点的值  
                        	mStudent.setName(parser.nextText());  
                        }  
                        if("age".equals(name))  
                        {  
                            //获取解析器当前指向元素的下一个文本节点的值  
                        	mStudent.setAge(new Short(parser.nextText()));  
                        }
                        if("sex".equals(name))
                        {
                        	//获取解析器当前指向元素的下一个文本节点的值  
                        	mStudent.setSex(parser.nextText());
                        }
                    }  
                    break;  
                //触发结束元素事件  
                case XmlPullParser.END_TAG:  
                    //  
                    if("student".equals(parser.getName()))  
                    {  
                    	students.add(mStudent);  
                        mStudent = null;  
                    }  
                    break;  
                default:  
                    break;  
            }  
            eventType = parser.next();  
        }  
        return students;  
    }  

}

[4] Demo的入口类:MainActivity.java

package com.andyidea.xmlparser;

import java.io.InputStream;
import java.util.List;

import com.andyidea.entity.Student;
import com.andyidea.util.ParserByPULL;

import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        AssetManager asset = getAssets();
        try {
            InputStream input = asset.open("student.xml");
            List<Student> list = ParserByPULL.getStudents(input);
            for (Student stu : list) {
                   Log.e("StudentInfo","Person ID: " + stu.getId() + ","
                         + stu.getName() + ", " + stu.getAge() + ", "
                         + stu.getSex());
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
}


[5]最后我们运行程序看看结果如下:


以上黑色方框中的内容就是采用PULL方式解析的结果。

相关文章推荐

Android之PULL解析XML

今天我们一起通过一个小例子来学习一下使用PULL解析器解析XML文件。 (1)首先我们放一个文件名为beauties.xml的XML文件到assets目录下,文件内容如下: ...

android pull 解析xml方式

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

android Pull解析xml 使用小结

轩辕剑                  100           Pull解析常用事件类型: XmlPullParser.START_DOCUMENT           ...

android学习二十一(使用Pull解析xml)

使用Pull解析xml      为了测试从网上得到的数据信息,我们需要配置一台服务器,我使用的是tomcat6.0,怎么配置tomcat我就不讲解了。配置好了以后在apache-tomcat-6.0...

浅析PULL解析

浅析PULL解析1. 基本介绍PULL方式解析XML是在Android中极力推荐使用的一种解析XML的方式,但PULL解析除了在Android中可以使用外,在JavaSE中仍然可以使用。在JavaSE...
  • zhliro
  • zhliro
  • 2015年07月10日 13:54
  • 2056

Android使用Pull方式解析XML

简单介绍:在Android应用开发中Pull方式解析XML是最被推荐的一种,Android系统内置了Pull解析器用来解析XML文件,它是采用事件驱动来完成XML解析的,只需要处理开始和结束事件,通常...

Android开发8——利用pull解析器读写XML文件

一、基本介绍 对XML解析有SAX和DOM等多种方式,Android中极力推荐xmlpull方式解析xml。xmlpull不仅可用在Android上同样也适用于javase,但在javase环境...

Android解析XML方式(二)使用PULL解析XML

在前一篇中介绍了使用SAX解析XML,本篇来讲一下如何使用JAVA自带的PULL来解析XML数据,以及它们的各自优点在哪里。 首先来看一下什么是PULL解析器以及它的基本特征: PULL解析器的运...

android xml使用pull解析

xml的三种解析方式,DOM,SAX,和Pull

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中使用PULL方式解析XML文件
举报原因:
原因补充:

(最多只允许输入30个字)