4.5使用pull解析XML文件
4.5.1使用序列化生成xml
/** * 写xml文件到本地 */
private void writeXmlToLocal(){
List<Person> personList = getPersonList();
//获取序列化对象
XmlSerializer serializer = Xml.newSerializer();
try {
File path = new File(Environment.getExternalStorageDirectory(),"person.xml");
FileOutputStream fos = new FileOutputStream(path);
//指定序列化对象输出的位置和编码
serializer.setOutput(fos,"utf-8");
serializer.startDocument("utf-8",true);//写开始信息<?xml version="1.0" encoding="utf-8" standalone="true"?>
serializer.startTag(null,"persons");//<persons>
for(Person person:personList){
//开始写人
serializer.startTag(null,"person");//<person>
serializer.attribute(null,"id",String.valueOf(person.getId()));
//写名字
serializer.startTag(null,"name");
serializer.text(person.getName());
serializer.endTag(null,"name");
//写年龄
serializer.startTag(null,"age");
serializer.text(String.valueOf(person.getAge()));
serializer.endTag(null,"age");
serializer.endTag(null,"person");//</person>
}
serializer.endTag(null,"persons");//</persons>
serializer.endDocument();//结束
} catch (Exception e) {
// TODO: handle exception
}
}
4.5.2使用pull解析xml
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。
下面是本例子要解析的XML文件:
private @H_301_101@List<Person> parseXmlFromLocal(){
try {
File path = new File(Environment@H_301_101@.getExternalStorageDirectory(),"person.xml");
FileInputStream fis = new FileInputStream(path);
//获得pull解析器对象
XmlPullParser parser = @H_301_101@Xml@H_301_101@.newPullParser();
//指定解析的文件和编码格式
parser@H_301_101@.setInput(fis,"utf-8");
//获得事件类型
int eventType = parser@H_301_101@.getEventType();
@H_301_101@List<Person> personList = @H_301_101@null;
Person person = @H_301_101@null;
while(eventType!=XmlPullParser@H_301_101@.END_DOCUMENT){
@H_301_101@String tagName = parser@H_301_101@.getName();
switch (eventType) {
case XmlPullParser@H_301_101@.START_TAG:
if("persons"@H_301_101@.equals(tagName)){
personList = new ArrayList<Person>();
}else if("person"@H_301_101@.equals(tagName)){
person = new Person();
person@H_301_101@.setId(@H_301_101@Integer@H_301_101@.parseInt(parser@H_301_101@.getAttributeValue(@H_301_101@null,"id")));
}else if("name"@H_301_101@.equals(tagName)){
person@H_301_101@.setName(parser@H_301_101@.nextText());
}else if("age"@H_301_101@.equals(tagName)){
person@H_301_101@.setAge(@H_301_101@Integer@H_301_101@.parseInt(parser@H_301_101@.nextText()));
}
break;
case XmlPullParser@H_301_101@.END_TAG:
if("person"@H_301_101@.equals(tagName)){
//需要把上面设置好的person对象添加到集合中
personList@H_301_101@.add(person);
}
default:
break;
}
eventType = parser@H_301_101@.next();//获取下一个时间类型
}
return personList;
} catch (Exception e) {
// TODO Auto-generated catch block
e@H_301_101@.printStackTrace();
}
return @H_301_101@null;
}