xml文件序列化即将对象集合转化为xml文件格式。
有两种方式序列化:
1)使用相应流进行逻辑拼接
2)使用xml的序列化器Xmlserlizer
1、使用StringBuffer拼接
StringBuffer sb = new StringBuffer(); 多线程访问安全
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sb.append("<persons>");
for (int i = 0; i < persons.size(); i++) {
sb.append("<person>");
sb.append("<name>");
sb.append(persons.get(i).getName());
sb.append("</name>");
sb.append("<age>");
sb.append(persons.get(i).getAge());
sb.append("</age>");
sb.append("</person>");
}
sb.append("</persons>");
String xml = sb.toString();
try {
FileOutputStream fos = openFileOutput("person.xml", MODE_PRIVATE);
fos.write(xml.getBytes());
fos.close();
2、使用xml序列化器Xmlserlizer
public void create(View v){
try {
List<PersonInfo> infos = new ArrayList<PersonInfo>();
infos.add(new PersonInfo(1, "小明", 32));
infos.add(new PersonInfo(2, "小红", 32));
//把对象集合变成xml
//xml序列化器
XmlSerializer serializer = Xml.newSerializer();//使用接口去接收一个真实的对象
FileOutputStream os = openFileOutput("persons.xml", Context.MODE_PRIVATE);
serializer.setOutput(os, "utf-8");//指定数据输出的路径
serializer.startDocument("utf-8", true);//文档的开始
serializer.startTag(null, "persons");//标签的开始
for(PersonInfo info:infos){
serializer.startTag(null, "person");
serializer.attribute(null, "id", info.id+"");//属性
//name
serializer.startTag(null, "name");
serializer.text(info.name);//文本节点
serializer.endTag(null, "name");
//age
serializer.startTag(null, "age");
serializer.text(info.age+"");
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");//标签的结束
serializer.endDocument();//文档的结束
os.close();//关流
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}