Android数据存储---Pull解析Xml文件

有如下xml文件:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<persons>
	<person id="1">
		<name>范冰冰</name>
		<age>31</age>
	</person>
	<person id="2">
		<name>林志玲</name>
		<age>38</age>
	</person>
	<person id="3">
		<name>杨幂</name>
		<age>26</age>
	</person>
</persons>


1.使用XmlPullParser读取xml文件:

	public List<Person> loadPersons(InputStream in) throws Exception {
		
		XmlPullParser parser = Xml.newPullParser();		// 获取解析器
		parser.setInput(in, "UTF-8");							// 设置输入流, 指定码表
		
		ArrayList<Person> persons = new ArrayList<Person>();
		Person p = null;
		// 最初type赋值为第一个事件, 只要不是文档结束就循环, 每次循环后解析下一个事件
		for (int type = parser.getEventType(); type != XmlPullParser.END_DOCUMENT; type = parser.next()) {
			if (type == XmlPullParser.START_TAG) {				// 如果遇到了标签开始事件
				if (parser.getName().equals("person")) {			// 如果标签名为"person"
					p = new Person();										// 创建对象
					String id = parser.getAttributeValue(0);		// 获取第一个属性的属性值
					p.setId(Integer.parseInt(id));						// 转为int, 设置id
					persons.add(p);											// 装入集合
				} else if (parser.getName().equals("name")) {	// 如果标签名为"name"
					String name = parser.nextText();					// 获取下一个文本
					p.setName(name);										// 设置name
				} else if (parser.getName().equals("age")) {		// 如果标签名为"age"
					String age = parser.nextText();					// 获取下一个文本
					p.setAge(Integer.parseInt(age));					// 设置age
				}
			} 
		}
		
		return persons;
	}



2.使用XmlPullParser保存数据到xml文件

public void savePersons(List<Person> persons, OutputStream out) throws IOException {
		XmlSerializer serializer = Xml.newSerializer();		// 获取序列化工具
		serializer.setOutput(out, "UTF-8");					// 设置输出流, 指定码表
		
		//Standalone属性是可选项,表示xml文档是否需要引用其他文件。取值为yes表示不引用,no表示引用,缺省值为no
		serializer.startDocument("UTF-8", true);	// 开始文档,设置编码方式  和   Standalone值
		serializer.startTag(null, "persons");		// 开始标签
		
		for (Person p : persons) {
			serializer.startTag(null, "person");
			serializer.attribute(null, "id", p.getId().toString());		// 设置属性
			
			serializer.startTag(null, "name");
			serializer.text(p.getName());			// 设置文本
			serializer.endTag(null, "name");
			
			serializer.startTag(null, "age");
			serializer.text(p.getAge().toString());
			serializer.endTag(null, "age");
			
			serializer.endTag(null, "person");
		}
		
		serializer.endTag(null, "persons");			// 结束标签
		serializer.endDocument();					// 结束文档
	}


3.Test类

public class PersonTest extends AndroidTestCase {

	public void testLoad() throws Exception {
		PersonService service = new PersonService();
		
		//读取xml文件,person.xml在src目录下
		InputStream in = PersonTest.class.getClassLoader().getResourceAsStream("persons.xml");
		List<Person> persons = service.loadPersons(in);
		for (Person p : persons) 
			System.out.println(p);
		
		//保存数据到xml文件中
		Person p = new Person(4, "张红", 18);
		persons.add(p);
		service.savePersons(persons, new FileOutputStream("/mnt/sdcard/persons.xml"));
	}
	
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值