首页 > 代码库 > 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 }
View Code

 

方法一:

创建一个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的生成