time 
设为首页】【收藏本站
当前位置: 主页 > 电脑网络 > 操作系统 > 嵌入式 > Android > Android应用开发入门(四十九)将对象序列化为XML格式

Android应用开发入门(四十九)将对象序列化为XML格式

时间:2013-11-19 10:39 点击:1305次 字体:[ ]




前言

  之前有讲过在Android下如何解析XML文件的内容,这篇博客讲讲如何把一个对象序列化为XML格式,有时候一些项目中需要传递一些XML格式的数据。而对于如何解析XML,不了解的朋友可以看看其他三篇:http://www.fengfly.com/plus/view-213372-1.htmlhttp://www.fengfly.com/plus/view-213373-1.htmlhttp://www.fengfly.com/plus/view-213374-1.html

 

什么是XML?

  首先我们先了解一下什么是XML。XML,可扩展标记语言 (Extensible Markup Language) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,这是百度百科的解释。而XML是一种在Internet中传输数据的常见格式,它与HTML一样,都是SGML(标准通用标记语言),无论你是需要通过Internet访问数据,或者发送数据给Web服务,都可能需要用到XML的知识。恰恰Android应用程序需要和网络交互,否则只是一款单机的无互动的应用程序,所以很可能在Android应用程序开发的过程中使用到XML。

  由于XML的扩展性强,致使它需要有稳定的基础规则来支持扩展,该语法规则需要注意的是:

  1. 开始和结束标签匹配。
  2. 嵌套标签不能相互嵌套。
  3. 区分大小写。

 

XML序列化

  当获取到一段数据后,如果需要把它序列化成XML的格式,通常有两种办法:

  1. 拼接字符串的形式序列化一个XML数据。
  2. 使用XmlSerializer类序列化一个XML数据。

  使用拼接字符串的方式很简单,就是个体力活,把需要序列化的对象,依照一定的格式序列化即可。下面通过一个示例讲解来演示如何拼接字符串,在示例中模拟联系人数据,然后对其进行序列化成XML,最后保存在SD卡上。

  1. private void backupToContact1(){  
  2.         StringBuilder sbuilder=new StringBuilder();  
  3.         // 设置XML的数据头  
  4.         sbuilder.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");  
  5.         sbuilder.append("<contacts>");  
  6.         // 遍历联系人信息  
  7.         for(Contact contact:Contacts){  
  8.             if(contact!=null){  
  9.                 sbuilder.append("<contact id='"+contact.getId()+"'>");  
  10.                 sbuilder.append("<name>");  
  11.                 sbuilder.append(contact.getName());  
  12.                 sbuilder.append("</name>");  
  13.                   
  14.                 sbuilder.append("<number>");  
  15.                 sbuilder.append(contact.getNumber());  
  16.                 sbuilder.append("</number>");  
  17.                   
  18.                 sbuilder.append("<address>");  
  19.                 sbuilder.append(contact.getAddress());  
  20.                 sbuilder.append("</address>");  
  21.                   
  22.                 sbuilder.append("</contact>");  
  23.             }  
  24.         }              
  25.         sbuilder.append("</contacts>");  
  26.         try {  
  27.             // 在SD卡上创建一个xml文件  
  28.             File file=new File(Environment.getExternalStorageDirectory(),"backup1.xml");  
  29.             FileOutputStream fos=new FileOutputStream(file);  
  30.             // 把序列化的数据写入到XML文件中  
  31.             fos.write(sbuilder.toString().getBytes());  
  32.             fos.close();  
  33.             Toast.makeText(MainActivity.this"备份成功"0).show();  
  34.         } catch (IOException e) {  
  35.             Toast.makeText(MainActivity.this"备份失败"0).show();  
  36.             e.printStackTrace();  
  37.         }  
  38.     } 

 

  执行完之后,可以把SD卡上的XML文件导出到电脑上,查看其内容。

  对于拼接字符串而言,可以看出,很容易出错,尤其是每个标签内如果还存在属性值就更需要细心了。而且如果其内容存在特殊的符号,如“<、>”等,就会导致XML序列化后的XML文件出错,而使用XmlSerializer来序列化XML文件就不存在这些问题。

  下面介绍第二种方式,通过XmlSerializer类来序列化XML。那先了解一下XmlSerializer,XmlSerializer主要是是以数据流的形式序列化XML,而它是一个接口类型,无法直接实例化,需要通过一个静态方法Xml.newSerializer()获取对象。

  以下是一些常用方法:

  • setOutput(OutputStream,String):设置输出流,以及编码格式。
  • startDocument(String,boolean):第一个参数设置文档的编码格式,第二个参数设置是否是一个独立的文档,一般设置为true。
  • endDocument():标记XML文档的结束,XML文档标签均为成对出现,有始有终。
  • startTag(String,String):一个XML标签的开始,第一个参数为命名空间,一般为null即可,第二个参数为标签名。
  • endTag(String,String):一个XML标签的结束,第一个参数为命名空间,一般为null即可,第二个参数为标签名,有始有终。
  • attribute(String,String,String):设置一个标签的属性,第一个参数为命名空间,第二个参数是属性名,第三个参数为属性值。



本文地址 : http://www.fengfly.com/plus/view-214085-1.html
标签: Android XML
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: