创建xml:
android创建xml文件有两种方式可选,一是手动自己拼接字符串,io流写入。二是用xml序列化器操作
拼接字符
private void writeXML_original(ArrayList<Message> msgs){
StringBuffer sb = new StringBuffer("<?xml version=\"1.0\" encoding=\"utf-8\"?>");//特殊字符需要转义
sb.append("<messages>");
for(Message msg : msgs){
sb.append("<msg>");
sb.append("<body>");
sb.append(msg.getBody());
sb.append("</body>");
sb.append("<type>");
sb.append(msg.getType());
sb.append("</type>");
sb.append("<date>");
sb.append(msg.getDate());
sb.append("</date>");
sb.append("<address>");
sb.append(msg.getAddress());
sb.append("</address>");
sb.append("</msg>");
}
sb.append("</messages>");
File file = new File(getFilesDir(),"msg.xml");
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(sb.toString().getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
xml序列化器
private void writeXML_serializer(ArrayList<Message> msgs){
File file = new File(getFilesDir(),"xmlSerializer.xml");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
//获取序列化器
XmlSerializer xmlSerializer = Xml.newSerializer();
xmlSerializer.setOutput(fos,"utf-8");//参数分别是 输出流,编码
//开始生成xml
xmlSerializer.startDocument("utf-8",true);//参数分别是 xml声明中的encoding的值,是否独立存在
xmlSerializer.startTag(null,"messages");//参数分别是 命名空间,tagName
//遍历加入数据
for (Message msg : msgs){
xmlSerializer.startTag(null,"msg");
xmlSerializer.startTag(null,"body");
xmlSerializer.text(msg.getBody());
xmlSerializer.endTag(null,"body");
xmlSerializer.startTag(null,"type");
xmlSerializer.text(msg.getType()+"");
xmlSerializer.endTag(null,"type");
xmlSerializer.startTag(null,"date");
xmlSerializer.text(msg.getDate()+"");
xmlSerializer.endTag(null,"date");
xmlSerializer.startTag(null,"address");
xmlSerializer.text(msg.getAddress());
xmlSerializer.endTag(null,"address");
xmlSerializer.endTag(null,"msg");
}
xmlSerializer.endTag(null,"messages");
xmlSerializer.endDocument();
} catch (Exception e) {
e.printStackTrace();
}finally {
if (fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
比较:
建议使用xml序列化器操作,因为拼接字符串对特殊字符如"<"等没有抵抗力,而xml序列化器已经做好了这些解析。