1.解析:
1) dom/dom4j:
缺点:占内存,会将文件全部读入内存后开始解析
2.)SAX:
缺点:一旦开始解析就不会停止,直到文件解析完成
3.)Pull:
解决了SAX解析不能停止的问题。
2.序列化:(将数据写到本地)
private void writeXmlToLocal(){
try {
// 获得序列号对象
XmlSerializer serializer = Xml.newSerializer();
File file = new File(Environment.getExternalStorageDirectory(), “person.xml”);
FileOutputStream fos = new FileOutputStream(file);
// 指定序列号对象输出的位置和编码
serializer.setOutput(fos, “utf-8”);
// 开始写
serializer.startDocument("utf-8", true);
serializer.startTag(null, "persons"); // <persons>
for(int i=0;i<personList.size();i++){
Person person = personList.get(i);
serializer.startTag(null, "person"); // <person>
serializer.attribute(null, "id", Integer.parseInt(person.getId())); // <person id="">
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge());
serializer.endTag(null, "age");
serializer.endTag(null, "person"); // </person>
}
serializer.endTag(null, "person"); // </persons>
serializer.endDocument();
} catch (Exception e) {
e.printStackTrace();
}
}
3.反序列化:(从本地读取数据解析为对象)
private List parseXmlFromLocal(){
try {
File file = new File(Environment.getExternalStorageDirectory(),”person.xml”);
FileInputStream fis = new FileInputStream(file);
// 获得解析器对象
XmlPullParser parse = XmlPullParserFactory.newInstance().newPullParser();
// 获得事件类型
int eventType = parse.getEventType();
List<Person> personList = null;
Person person = null;
String id = null;
while(eventType!=XmlPullParser.END_DOCUMENT){
// 当前节点名称
String tagName = parse.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if("persons".equals(tagName)){
personList = new ArrayList<Person>();
} else if("person".equals(tagName)){
person = new Person();
id = parse.getAttributeValue(null, "id");
person.setId(Integer.parseInt(id));
} else if("name".equals(tagName)){
person.setName(parse.nextText());
} else if("age".equals(tagName)){
person.setAge(Integer.parseInt(parse.nextText()));
}
break;
case XmlPullParser.END_TAG:
if("person".equals(tagName)){
personList.add(person);
}
break;
}
// 获得下一个事件类型
eventType = parse.next();
}
return personList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}