加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

03.pull解析xml

发布时间:2020-12-16 09:37:30 所属栏目:百科 来源:网络整理
导读: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;/** * 一个接口,一个例外,一个工厂组成
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繁琐的树状结构

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读