android 使用pull方式解析xml文件

如题,应该网络上讲解的是比较多了,我这里只是做一个简单的总结。

首先在工程的src目录下建一个person.xml文件:


好,我们现在就用pull方式来解析这个xml文件,文件内容如下:注意xml文件,几个重要的判断条件:文档开始,文档结束,元素开始,元素结束。元素的属性对应的value,元素的txt值。搞清楚这个就很明白了pull的解析原则了。



为了方便,将xml中的person节点构建成一个model类


/**
 * @FILE:Person.java
 * @AUTHOR:Administrator
 * @DATE:2013-5-5 下午4:20:15
 **/
package com.example.entity;

/*******************************************
 * 
 * @CLASS:Person
 * @DESCRIPTION:
 * @AUTHOR:Administrator
 * @VERSION:v1.0
 * @DATE:2013-5-5 下午4:20:15
 *******************************************/
public class Person {
	private Integer id;
	private String name;
	private Integer age;

	public Person() {
	}

	public Person(Integer id, String name, Integer age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

}

再次解析这个xml文件:下面第一句就是用类加载器加载xml文件。

如果xml放在了assets文件夹下,那么就要用另一种方法来加载文件了:InputStream inputStream=getResources().getAssets().open("person.xml");不管用哪种方法加载文件,最终结果都是要获得InputStream对象。

	InputStream inputStream = this.getClass().getClassLoader()
				.getResourceAsStream("person.xml");
		List<Person> persons = PersonService.getPersons(inputStream);

public class PersonService {
	public static  List<Person> getPersons(InputStream is) {
		List<Person> persons = null;
		Person person = null;
		// 获得一个pull解析器
		XmlPullParser pullParser = Xml.newPullParser();
		try {
			// 为pull解析器提供一个xml文件的输入流
			pullParser.setInput(is, "utf-8");
			// 获取的事件类型
			int event = pullParser.getEventType();
			// 对事件类型进行判断(注意这里的常量XmlPullParser)
			while (event != XmlPullParser.END_DOCUMENT) {
				switch (event) {
				// 文档开始
				case XmlPullParser.START_DOCUMENT:
					persons = new ArrayList<Person>();
					break;
				// 元素开始
				case XmlPullParser.START_TAG:
					if ("person".equals(pullParser.getName())) {
						person = new Person();
						// 注意这里属性的位数是从0开始
						person.setId(new Integer(pullParser
								.getAttributeValue(0)));
					}
					if ("name".equals(pullParser.getName())) {
						person.setName(pullParser.getText());
					}
					if ("age".equals(pullParser.getName())) {
						person.setAge(new Integer(pullParser.getText()));
					}
					break;
				case XmlPullParser.END_TAG:
					if ("person".equals(pullParser.getName())) {
						persons.add(person);
						person = null;
					}
					break;
				}

			}
			// 让pull解析器的指针指向下一个元素
			event = pullParser.next();
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return persons;
	}
注释应该很明白了,呵呵。就总结到这里吧。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值