您的位置:首页 > 移动开发 > Android开发

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

2013-11-14 21:59 495 查看
有如下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"));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: