由于直接使用流操作xml时,当遇到数据中含有标签格式的数据时候,比如:有本书<你给>。那么在生成xml文件的时候,会报错。为了更加高效正确的生成xml文件,我们可以使用XmlSerializer来进行操作。操作步骤:
1、通过Xml.newSerializer() 获取XmlSerializer对象
2、通过setOutput制定生成文件的输出流和编码
3、通过startDocument,开始生成xml,并指定头结点中的enconding属性的值
4、通过startTag和endTag以及text,来操作标签内容
5、通过endDocument告诉序列化器,文件生成完毕。
public void click(View v){
//使用xml序列化器生成xml文件
//1.拿到序列化器对象
XmlSerializer xs = Xml.newSerializer();
//2.初始化
File file = new File(Environment.getExternalStorageDirectory(),"sms2.xml");
try {
FileOutputStream fos = new FileOutputStream(file);
//enconding:指定用什么编码生成xml文件
xs.setOutput(fos, "utf-8");
//3.开始生成xml文件
//enconding:指定头结点中的enconding属性的值
xs.startDocument("utf-8", true);
xs.startTag(null, "message");
for (Message sms : smsList) {
xs.startTag(null, "sms");
xs.startTag(null, "body");
xs.text(sms.getBody() + "<body>");
xs.endTag(null, "body");
xs.startTag(null, "date");
xs.text(sms.getDate());
xs.endTag(null, "date");
xs.startTag(null, "type");
xs.text(sms.getType());
xs.endTag(null, "type");
xs.startTag(null, "address");
xs.text(sms.getAddress());
xs.endTag(null, "address");
xs.endTag(null, "sms");
}
xs.endTag(null, "message");
//告诉序列化器,文件生成完毕
xs.endDocument();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}