Android开发之使用pull解析xml文件

XML在Android中是非常常见用来保存数据的文件,解析的方法也很多,如:DOM、SAX、PULL,其中PULL是Android自带的解析XML方法

DOM:是一次性加载完,生成树状结构,但消耗内存较大,如果这个xml文件比较大就不适合使用DOM来解析

SAX:是基于事件的方式,边加载边解析,效率较高,但解析过不能倒退

PULL:跟ASX有点类似,也是基于事件

程序目录结构



使用pull解析

package com.example.xmlpullparserdemo.service;

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

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

import com.example.xmlpullparserdemo.domain.UserInfo;

public class UserService {
	/**
	 * 使用pull解析xml文件
	 * 
	 * @param is
	 * @return
	 */
	public static List<UserInfo> getUserInfos(InputStream is) {
		try {
			XmlPullParser xmlPullParser = Xml.newPullParser();
			// 初始化解析器
			xmlPullParser.setInput(is, "utf-8");
			List<UserInfo> userInfos = null;
			UserInfo userInfo = null;
			int type = xmlPullParser.getEventType();
			while (type != XmlPullParser.END_DOCUMENT) {
				switch (type) {
				case XmlPullParser.START_TAG: // 开始解析标签
					// 根标签
					if ("users".equals(xmlPullParser.getName())) {
						userInfos = new ArrayList<UserInfo>();
					} else if ("user".equals(xmlPullParser.getName())) {
						userInfo = new UserInfo();
						String id = xmlPullParser.getAttributeValue(0);
						userInfo.setId(Integer.parseInt(id));
					} else if ("name".equals(xmlPullParser.getName())) {
						String name = xmlPullParser.nextText();
						userInfo.setName(name);
					} else if ("age".equals(xmlPullParser.getName())) {
						String age = xmlPullParser.nextText();
						userInfo.setAge(Integer.parseInt(age));
					} else if ("sex".equals(xmlPullParser.getName())) {
						String sex = xmlPullParser.nextText();
						userInfo.setSex(sex);
					} else if ("brithday".equals(xmlPullParser.getName())) {
						String brithday = xmlPullParser.nextText();
						userInfo.setBrithday(Integer.parseInt(brithday));
					}
					break;
				case XmlPullParser.END_TAG:
					if ("user".equals(xmlPullParser.getName())) {
						userInfos.add(userInfo);
						userInfo = null;
					}
					break;
				default:
					break;
				}
				type = xmlPullParser.next(); // 获取下一个节点
			}
			return userInfos;
		} catch (Exception e) {
			// TODO: handle exception
		}
		return null;
	}
}

主Activity类

package com.example.xmlpullparserdemo;

import java.util.List;

import com.example.xmlpullparserdemo.domain.UserInfo;
import com.example.xmlpullparserdemo.service.UserService;

import android.os.Bundle;
import android.widget.TextView;
import android.app.Activity;

public class MainActivity extends Activity {

	private TextView text;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		text = (TextView)findViewById(R.id.text);
		List<UserInfo> infos = UserService.getUserInfos(MainActivity.class
				.getClassLoader().getResourceAsStream("backup.xml"));
		System.out.println("---onCreate");
		StringBuffer sp = new StringBuffer();
		for(UserInfo info : infos){
			System.out.println(info.toString());
			sp.append(info.toString());
			sp.append("\n");
		}
		text.setText(sp.toString());
	}
}

得到的结果



Demo下载

点击打开链接





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值