android之XmlSerializer序列化XML(写入)

来源:互联网 发布:virtual安装ubuntu 编辑:程序博客网 时间:2024/04/29 21:17

http://blog.csdn.net/chenzheng_java/article/details/6220258 

首先,我们看一下什么是serializer,serializer就是串行化,又名序列化。它可并不只是简单的把对象保存在存储器上,它可以使我们在流中传输对象,使对象变的可以像基本数据一样传递。

最终效果图如上

现在粘贴主要代码:

main.xml

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView    
  8.     android:layout_width="fill_parent"   
  9.     android:layout_height="wrap_content"   
  10.     android:id="@+id/textView"  
  11.     />  
  12. </LinearLayout>  

activity的代码

 

[java] view plaincopy
  1. package cn.com.xmlseriliazer;  
  2.   
  3. import java.io.StringWriter;  
  4. import java.util.ArrayList;  
  5.   
  6. import org.xmlpull.v1.XmlPullParserFactory;  
  7. import org.xmlpull.v1.XmlSerializer;  
  8.   
  9. import android.app.Activity;  
  10. import android.os.Bundle;  
  11. import android.widget.TextView;  
  12. /** 
  13.  *  
  14.  * @author chenzheng_java 
  15.  * @description 测试通过XmlSerilizer生成xml文件 
  16.  * @since 2011/03/03 
  17.  * 
  18.  */  
  19. public class XmlSerializerActivity extends Activity {  
  20.     @Override  
  21.     public void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.main);  
  24.           
  25.         String result = produceXml();  
  26.         TextView textView = (TextView)this.findViewById(R.id.textView);  
  27.         textView.setText(result);  
  28.           
  29.     }  
  30.     /** 
  31.      *  
  32.      * @return 生成的xml文件的字符串表示 
  33.      */  
  34.     private String produceXml(){  
  35.           
  36.         StringWriter stringWriter = new StringWriter();  
  37.         ArrayList<Beauty> beautyList = getData();  
  38.         try {  
  39.             // 获取XmlSerializer对象  
  40.             XmlPullParserFactory factory = XmlPullParserFactory.newInstance();  
  41.             XmlSerializer xmlSerializer = factory.newSerializer();  
  42.             // 设置输出流对象  
  43.             xmlSerializer.setOutput(stringWriter);  
  44.             /* 
  45.              * startDocument(String encoding, Boolean standalone)encoding代表编码方式 
  46.              * standalone  用来表示该文件是否呼叫其它外部的文件。 
  47.              * 若值是 ”yes” 表示没有呼叫外部规则文件,若值是 ”no” 则表示有呼叫外部规则文件。默认值是 “yes”。 
  48.              */  
  49.             xmlSerializer.startDocument("utf-8"true);  
  50.             xmlSerializer.startTag(null"beauties");  
  51.             for(Beauty beauty:beautyList){  
  52.                 /* 
  53.                  * startTag (String namespace, String name)这里的namespace用于唯一标识xml标签 
  54.                  *XML 命名空间属性被放置于某个元素的开始标签之中,并使用以下的语法: 
  55.                     xmlns:namespace-prefix="namespaceURI" 
  56.                     当一个命名空间被定义在某个元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。 
  57.                     注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向某个实存的网页,这个网页包含着有关命名空间的信息。 
  58.                  */  
  59.                 xmlSerializer.startTag(null"beauty");  
  60.                   
  61.                 xmlSerializer.startTag(null"name");  
  62.                 xmlSerializer.text(beauty.getName());  
  63.                 xmlSerializer.endTag(null"name");  
  64.                   
  65.                 xmlSerializer.startTag(null"age");  
  66.                 xmlSerializer.text(beauty.getAge());  
  67.                 xmlSerializer.endTag(null"age");  
  68.                   
  69.                 xmlSerializer.endTag(null"beauty");  
  70.             }  
  71.             xmlSerializer.endTag(null"beauties");  
  72.             xmlSerializer.endDocument();  
  73.         } catch (Exception e) {  
  74.             e.printStackTrace();  
  75.         }  
  76.         return stringWriter.toString();  
  77.   
  78.     }  
  79.       
  80.     /** 
  81.      *  
  82.      * @return 包含了众多美女信息的集合 
  83.      */  
  84.     private ArrayList<Beauty> getData(){  
  85.         ArrayList<Beauty> beautyList = new ArrayList<Beauty>();  
  86.           
  87.         Beauty yangmi = new Beauty("杨幂""23");  
  88.         Beauty linzhiling = new Beauty("林志玲""28");  
  89.   
  90.         beautyList.add(yangmi);  
  91.         beautyList.add(linzhiling);  
  92.           
  93.         return beautyList;  
  94.     }  
  95.       
  96.     /** 
  97.      *  
  98.      * @author chenzheng_java 
  99.      *  美人实体类 
  100.      */  
  101.     private class Beauty{  
  102.         String name;  
  103.         String age ;  
  104.         public String getName() {  
  105.             return name;  
  106.         }  
  107.         public void setName(String name) {  
  108.             this.name = name;  
  109.         }  
  110.         public String getAge() {  
  111.             return age;  
  112.         }  
  113.         public void setAge(String age) {  
  114.             this.age = age;  
  115.         }  
  116.         @Override  
  117.         public String toString() {  
  118.             return "Beauty [age=" + age + ", name=" + name + "]";  
  119.         }  
  120.         public Beauty(String name, String age) {  
  121.             this.name = name;  
  122.             this.age = age;  
  123.         }  
  124.         public Beauty(){  
  125.               
  126.         }  
  127.           
  128.     }  
  129.       
  130. }  
 

其他都为默认。

 由代码我们可以看到,其实使用xmlserializer生成xml也是相当容易的。基本的步骤和解析xml差不多。这里就不多说话了。详情请看api。

0 0
原创粉丝点击