03.pull解析xml

package com.xiaoxin.xml.Pull;

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

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

import com.xiaoxin.xml.bean.Person;

/**
 * 一个接口,一个例外,一个工厂组成了pull解析器
 * 调用parser.next()进入下一个元素并触发相应事件
 * @author Administrator
 *
 */
public class PullPersonService {
	public static List<Person> getPersons(InputStream inputStream)throws Exception{
		//这是清空的意思么
		Person person=null;
		//清空数组?
		List<Person> persons=null;
		//创立pull解析器
		XmlPullParser pullParser=Xml.newPullParser();
		//以UTF-8的编码导入
		pullParser.setInput(inputStream,"utf-8");
		//其结果是数字 
		int event = pullParser.getEventType();//触发第一个事件
		while(event!=XmlPullParser.END_DOCUMENT){
			switch (event) {
			//开始解析
			case XmlPullParser.START_DOCUMENT:
				//用数组的形式开始接受
				persons=new ArrayList<Person>();
				break;
				//开始元素
			case XmlPullParser.START_TAG:
				//如果解析的第一个事件名字是person
				if("person".equals(pullParser.getName())){
					//将其ID 变成0
					int id = new Integer(pullParser.getAttributeValue(0));
					person=new Person();
					person.setId(id);
				}
				if(person!=null){
					//如果不为空 将其name设置
					if("name".equals(pullParser.getName())){
						person.setName(pullParser.nextText());
						
					}
					//将其age设置
					if("person".equals(pullParser.getName())){
						person.setAge(new Short(pullParser.nextText()));
						
					}
					
				}
				break;
			case XmlPullParser.END_TAG:
				if("person".equals(pullParser.getName())){
					//将业务bean添加到集合的中
					persons.add(person);
					//清空业务
					person=null;
				}
				break;
			}
			//进行下一步
			event=pullParser.next();
		}
		
		return persons;
		
	}
}

 

<?xml version="1.0" encoding="utf-8"?>
<person>
<!--  先进行检测这一行 -->
    <person id="23" >
        <name>
	NEwii
        </name>

        <age>
	21
        </age>
    </person>
<!--     检测完了 将业务bean person.java清空,并进行next操作 -->
    <person id="20" >
        <name>
	WiiWill
        </name>

        <age>
	25
        </age>
    </person>

</person>


测试单元 代码

package com.xiaoxin.xml.Pull;

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

import com.xiaoxin.xml.DOM.Dom;
import com.xiaoxin.xml.bean.Person;

import android.test.AndroidTestCase;
import android.util.Log;

public class PullServiceTest extends AndroidTestCase {
	private static final String TAG = "PullServiceTest";

	public void testPull() throws Throwable {
		// 因为XML在src文件中 可以直接反射到路径 inputStream
		InputStream inputStream = this.getClass().getClassLoader()
				.getResourceAsStream("xiaoxin.xml");
		List<Person>persons=PullPersonService.getPersons(inputStream);
		for(Person person:persons){
			Log.i(TAG, person.toString());
		}
	}
}


总结:有着sax的解析器的性能。可在编码上有没有sax的那么繁琐。同时也没有DOM繁琐的树状结构
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值