android之XmlSerializer序列化XML(写入) android之XmlSerializer序列化XML(写入)...

android之XmlSerializer序列化XML(写入)

分类:android_数据增删查改 7437人阅读 评论(2) 收藏 举报

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

最终效果图如上

现在粘贴主要代码:

main.xml

[xhtml] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns: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 plain copy
  1. packagecn.com.xmlseriliazer;
  2. importjava.io.StringWriter;
  3. importjava.util.ArrayList;
  4. importorg.xmlpull.v1.XmlPullParserFactory;
  5. importorg.xmlpull.v1.XmlSerializer;
  6. importandroid.app.Activity;
  7. importandroid.os.Bundle;
  8. importandroid.widget.TextView;
  9. /**
  10. *
  11. *@authorchenzheng_java
  12. *@description测试通过XmlSerilizer生成xml文件
  13. *@since2011/03/03
  14. *
  15. */
  16. publicclassXmlSerializerActivityextendsActivity{
  17. @Override
  18. publicvoidonCreate(BundlesavedInstanceState){
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.main);
  21. Stringresult=produceXml();
  22. TextViewtextView=(TextView)this.findViewById(R.id.textView);
  23. textView.setText(result);
  24. }
  25. /**
  26. *
  27. *@return生成的xml文件的字符串表示
  28. */
  29. privateStringproduceXml(){
  30. StringWriterstringWriter=newStringWriter();
  31. ArrayList<Beauty>beautyList=getData();
  32. try{
  33. //获取XmlSerializer对象
  34. XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();
  35. XmlSerializerxmlSerializer=factory.newSerializer();
  36. //设置输出流对象
  37. xmlSerializer.setOutput(stringWriter);
  38. /*
  39. *startDocument(Stringencoding,Booleanstandalone)encoding代表编码方式
  40. *standalone用来表示该文件是否呼叫其它外部的文件。
  41. *若值是”yes”表示没有呼叫外部规则文件,若值是”no”则表示有呼叫外部规则文件。默认值是“yes”。
  42. */
  43. xmlSerializer.startDocument("utf-8",true);
  44. xmlSerializer.startTag(null,"beauties");
  45. for(Beautybeauty:beautyList){
  46. /*
  47. *startTag(Stringnamespace,Stringname)这里的namespace用于唯一标识xml标签
  48. *XML命名空间属性被放置于某个元素的开始标签之中,并使用以下的语法:
  49. xmlns:namespace-prefix="namespaceURI"
  50. 当一个命名空间被定义在某个元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
  51. 注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向某个实存的网页,这个网页包含着有关命名空间的信息。
  52. */
  53. xmlSerializer.startTag(null,"beauty");
  54. xmlSerializer.startTag(null,"name");
  55. xmlSerializer.text(beauty.getName());
  56. xmlSerializer.endTag(null,"name");
  57. xmlSerializer.startTag(null,"age");
  58. xmlSerializer.text(beauty.getAge());
  59. xmlSerializer.endTag(null,"age");
  60. xmlSerializer.endTag(null,"beauty");
  61. }
  62. xmlSerializer.endTag(null,"beauties");
  63. xmlSerializer.endDocument();
  64. }catch(Exceptione){
  65. e.printStackTrace();
  66. }
  67. returnstringWriter.toString();
  68. }
  69. /**
  70. *
  71. *@return包含了众多美女信息的集合
  72. */
  73. privateArrayList<Beauty>getData(){
  74. ArrayList<Beauty>beautyList=newArrayList<Beauty>();
  75. Beautyyangmi=newBeauty("杨幂","23");
  76. Beautylinzhiling=newBeauty("林志玲","28");
  77. beautyList.add(yangmi);
  78. beautyList.add(linzhiling);
  79. returnbeautyList;
  80. }
  81. /**
  82. *
  83. *@authorchenzheng_java
  84. *美人实体类
  85. */
  86. privateclassBeauty{
  87. Stringname;
  88. Stringage;
  89. publicStringgetName(){
  90. returnname;
  91. }
  92. publicvoidsetName(Stringname){
  93. this.name=name;
  94. }
  95. publicStringgetAge(){
  96. returnage;
  97. }
  98. publicvoidsetAge(Stringage){
  99. this.age=age;
  100. }
  101. @Override
  102. publicStringtoString(){
  103. return"Beauty[age="+age+",name="+name+"]";
  104. }
  105. publicBeauty(Stringname,Stringage){
  106. this.name=name;
  107. this.age=age;
  108. }
  109. publicBeauty(){
  110. }
  111. }
  112. }

其他都为默认。

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

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

最终效果图如上

现在粘贴主要代码:

main.xml

[xhtml] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns: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 plain copy
  1. packagecn.com.xmlseriliazer;
  2. importjava.io.StringWriter;
  3. importjava.util.ArrayList;
  4. importorg.xmlpull.v1.XmlPullParserFactory;
  5. importorg.xmlpull.v1.XmlSerializer;
  6. importandroid.app.Activity;
  7. importandroid.os.Bundle;
  8. importandroid.widget.TextView;
  9. /**
  10. *
  11. *@authorchenzheng_java
  12. *@description测试通过XmlSerilizer生成xml文件
  13. *@since2011/03/03
  14. *
  15. */
  16. publicclassXmlSerializerActivityextendsActivity{
  17. @Override
  18. publicvoidonCreate(BundlesavedInstanceState){
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.main);
  21. Stringresult=produceXml();
  22. TextViewtextView=(TextView)this.findViewById(R.id.textView);
  23. textView.setText(result);
  24. }
  25. /**
  26. *
  27. *@return生成的xml文件的字符串表示
  28. */
  29. privateStringproduceXml(){
  30. StringWriterstringWriter=newStringWriter();
  31. ArrayList<Beauty>beautyList=getData();
  32. try{
  33. //获取XmlSerializer对象
  34. XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();
  35. XmlSerializerxmlSerializer=factory.newSerializer();
  36. //设置输出流对象
  37. xmlSerializer.setOutput(stringWriter);
  38. /*
  39. *startDocument(Stringencoding,Booleanstandalone)encoding代表编码方式
  40. *standalone用来表示该文件是否呼叫其它外部的文件。
  41. *若值是”yes”表示没有呼叫外部规则文件,若值是”no”则表示有呼叫外部规则文件。默认值是“yes”。
  42. */
  43. xmlSerializer.startDocument("utf-8",true);
  44. xmlSerializer.startTag(null,"beauties");
  45. for(Beautybeauty:beautyList){
  46. /*
  47. *startTag(Stringnamespace,Stringname)这里的namespace用于唯一标识xml标签
  48. *XML命名空间属性被放置于某个元素的开始标签之中,并使用以下的语法:
  49. xmlns:namespace-prefix="namespaceURI"
  50. 当一个命名空间被定义在某个元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
  51. 注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向某个实存的网页,这个网页包含着有关命名空间的信息。
  52. */
  53. xmlSerializer.startTag(null,"beauty");
  54. xmlSerializer.startTag(null,"name");
  55. xmlSerializer.text(beauty.getName());
  56. xmlSerializer.endTag(null,"name");
  57. xmlSerializer.startTag(null,"age");
  58. xmlSerializer.text(beauty.getAge());
  59. xmlSerializer.endTag(null,"age");
  60. xmlSerializer.endTag(null,"beauty");
  61. }
  62. xmlSerializer.endTag(null,"beauties");
  63. xmlSerializer.endDocument();
  64. }catch(Exceptione){
  65. e.printStackTrace();
  66. }
  67. returnstringWriter.toString();
  68. }
  69. /**
  70. *
  71. *@return包含了众多美女信息的集合
  72. */
  73. privateArrayList<Beauty>getData(){
  74. ArrayList<Beauty>beautyList=newArrayList<Beauty>();
  75. Beautyyangmi=newBeauty("杨幂","23");
  76. Beautylinzhiling=newBeauty("林志玲","28");
  77. beautyList.add(yangmi);
  78. beautyList.add(linzhiling);
  79. returnbeautyList;
  80. }
  81. /**
  82. *
  83. *@authorchenzheng_java
  84. *美人实体类
  85. */
  86. privateclassBeauty{
  87. Stringname;
  88. Stringage;
  89. publicStringgetName(){
  90. returnname;
  91. }
  92. publicvoidsetName(Stringname){
  93. this.name=name;
  94. }
  95. publicStringgetAge(){
  96. returnage;
  97. }
  98. publicvoidsetAge(Stringage){
  99. this.age=age;
  100. }
  101. @Override
  102. publicStringtoString(){
  103. return"Beauty[age="+age+",name="+name+"]";
  104. }
  105. publicBeauty(Stringname,Stringage){
  106. this.name=name;
  107. this.age=age;
  108. }
  109. publicBeauty(){
  110. }
  111. }
  112. }

其他都为默认。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值