Android系统已经集成了Pull,所以不用导包。
Xml解析:
public static List<Person> getPersons(InputStream xml) throws Exception {
List<Person> persons = null;
Person person = null;
// 获取xml的破解器,有下列两种方法
//XmlPullParser pullParser = XmlPullParserFactory.newInstance().newPullParser();
XmlPullParser pullParser = Xml.newPullParser();
// 为破解器设置要解析的数据
pullParser.setInput(xml, "UTF-8");
// 首先将xmml数据读到字节数组中,,然后一个一个字符读取,判断<?xml version="1.0" encoding="UTF-8" ?>
// 是否符合XML中的某个语法,然后触发相应的事件。
int envnt = pullParser.getEventType();
while (envnt != XmlPullParser.END_DOCUMENT) { //调用结束条件
switch (envnt) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if ("person".equals(pullParser.getName())) {
//获取节点的属性值
int id = new Integer(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
}
if ("name".equals(pullParser.getName())) {
//获取节点后面的text
String name = pullParser.nextText();
person.setName(name);
}
if ("age".equals(pullParser.getName())) {
int age = new Integer(pullParser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
persons.add(person);
person = null;
break;
}
//解析到<?xml version="1.0" encoding="UTF-8" ?>完成之后,解析器不会自动解析,如果想继续解析结点,调用如下方法
envnt = pullParser.next();
}
return persons;
}
测试类:
private static final String TAG = "TestDemo";
public void testPersons() throws Exception{
InputStream is = this.getClass().getClassLoader().getResourceAsStream("person.xml");
List<Person> persons = PersonServace.getPersons(is);
for(Person p : persons){
Log.i(TAG,p.toString());
}
}
生成XML文件:
//保存数据到xml文件中
public static void save(List<Person> persons, OutputStream os) throws Exception{
//得到序列化器
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(os,"UTF-8");
//设置输出
serializer.startDocument("UTF-8",true);
serializer.startTag(null,"persons");
//迭代集合,得到每个元素,生成person节点
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();
os.flush();
os.close();
}
测试文件:
public void testSave() throws Exception{
List<Person> persons = new ArrayList<>();
persons.add(new Person(19,"yanxi",10));
File xmlFile = new File(getContext().getFilesDir(),"itcast.xml");
FileOutputStream fos = new FileOutputStream(xmlFile);
PersonServace.save(persons,fos);
}