首页 > 代码库 > Xml的生成
Xml的生成
在Android中xml的生成有两种,其一是手工写入,其二是用XmlSerializer对象来生成。
比如要生成下面这中。
先创建一个SmsDao.java 类用来封装信息。
1 package cn.starry.xml.dao; 2 3 import java.util.ArrayList; 4 5 import cn.starry.xml.bean.SmsBean; 6 7 public class SmsDao { 8 //获得短信数据,模拟一些假数据 9 public static ArrayList<SmsBean> getAllSms() { 10 11 ArrayList<SmsBean> arrayList = new ArrayList<SmsBean>(); 12 13 SmsBean smsBean = new SmsBean(); 14 smsBean.id = 1; 15 smsBean.num = "120"; 16 smsBean.msg = "dasdadas"; 17 smsBean.date = "2017-7-17"; 18 arrayList.add(smsBean); 19 20 SmsBean smsBean1 = new SmsBean(); 21 smsBean1.id = 2; 22 smsBean1.num = "110"; 23 smsBean1.msg = "daAAAs"; 24 smsBean1.date = "2017-7-17"; 25 arrayList.add(smsBean1); 26 27 SmsBean smsBean2 = new SmsBean(); 28 smsBean2.id = 3; 29 smsBean2.num = "130"; 30 smsBean2.msg = "daDDDs"; 31 smsBean2.date = "2017-7-17"; 32 arrayList.add(smsBean2); 33 return arrayList; 34 35 } 36 37 }
方法一:
创建一个StringBuffer对象,然后往里面手工append。
1 public static boolean backupSms(Context mContext) { 2 3 allSms = SmsDao.getAllSms(); 4 StringBuffer sb = new StringBuffer(); 5 //封装一个头 6 sb.append("<?xml version=‘1.0‘ encoding=‘utf-8‘ standalone=‘yes‘ ?>"); 7 //封装根节点 8 sb.append("<Smss>"); 9 //循环遍历list集合封装所有的短信 10 for (SmsBean smsBean : allSms) { 11 sb.append("<Sms id = \""+smsBean.id+"\">"); 12 13 sb.append("<num>"); 14 sb.append(smsBean.num); 15 sb.append("</num>"); 16 17 sb.append("<msg>"); 18 sb.append(smsBean.msg); 19 sb.append("</num>"); 20 21 sb.append("<date>"); 22 sb.append(smsBean.date); 23 sb.append("</date>"); 24 sb.append("</Sms>"); 25 } 26 sb.append("</Smss>"); 27 28 try { 29 FileOutputStream openFileOutput = mContext.openFileOutput("backupsms.xml", Context.MODE_PRIVATE); 30 openFileOutput.write(sb.toString().getBytes()); 31 openFileOutput.close(); 32 return true; 33 } catch (Exception e) { 34 e.printStackTrace(); 35 } 36 return false; 37 }
这种方法明显不好,只要有一个地方写错了,就有可能生成不了,比如把一个‘/‘丢了,肯定生成不了了。
正好Android里自带了一个XmlSerializer类,可以用来生成xml的。
里面有几个常用的方法
1、setOutput(os, encoding) :os表示写入的文件, encoding表示写入的编码
2、startDocument(encoding, standalone):序列化xml的声明头,比如<?xml version=‘1.0‘ encoding=‘utf-8‘ standalone=‘yes‘ ?>
encoding表示xml的编码,standalone:是否独立
3、startTag(namespace, name):序列化一个根节点的开始节点,namespace表示命名空间,name表示根节点的名字
4、endTag(namespace, name):与startTag相反,一个根节点的结束
5、endDocument 完成xml的序列化
1 public static boolean backupSms_androind(Context mContext){ 2 try{ 3 allSms = SmsDao.getAllSms(); 4 //1创建一个XmlSerializer对象 5 XmlSerializer xs = Xml.newSerializer(); 6 //2设置XmlSerializer的一些参数,比如:设置写入的xml文件的对象 7 xs.setOutput(mContext.openFileOutput("backupsms2.xml", mContext.MODE_PRIVATE), "utf-8"); 8 //3序列化一个xml的声明头 9 xs.startDocument("utf-8", true); 10 //4序列化一个根节点的开始节点 11 xs.startTag(null, "Smss"); 12 //5循环遍历list集合序列化一条条短信 13 14 for (SmsBean smsBean : allSms) { 15 xs.startTag(null, "sms"); 16 //name:属性的名称 value:属性值 17 xs.attribute(null, "id", smsBean.id+""); 18 19 20 xs.startTag(null, "num"); 21 xs.text(smsBean.num); 22 xs.endTag(null, "num"); 23 24 25 xs.startTag(null, "msg"); 26 xs.text(smsBean.msg); 27 xs.endTag(null, "msg"); 28 29 xs.startTag(null, "date"); 30 xs.text(smsBean.date); 31 xs.endTag(null, "date"); 32 33 34 xs.endTag(null, "sms"); 35 } 36 37 //6序列化一个跟根节点的结束节点 38 xs.endTag(null, "Smss"); 39 //7将xml写入到文件中,完成xml的序列化 40 41 xs.endDocument(); 42 return true; 43 }catch (Exception e) { 44 e.printStackTrace(); 45 } 46 return false; 47 }
Xml的生成
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。