Android中XML文件的序列化生成与解析

首先,我把Person的实体类

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. package net.loonggg.test;    
  2.     
  3. public class Person {    
  4.     private int id;    
  5.     private String age;    
  6.     private String name;    
  7.     private String sex;    
  8.     private String address;    
  9.     
  10.     public int getId() {    
  11.         return id;    
  12.     }    
  13.     
  14.     public void setId(int id) {    
  15.         this.id = id;    
  16.     }    
  17.     
  18.     public String getAge() {    
  19.         return age;    
  20.     }    
  21.     
  22.     public void setAge(String age) {    
  23.         this.age = age;    
  24.     }    
  25.     
  26.     public String getName() {    
  27.         return name;    
  28.     }    
  29.     
  30.     public void setName(String name) {    
  31.         this.name = name;    
  32.     }    
  33.     
  34.     public String getSex() {    
  35.         return sex;    
  36.     }    
  37.     
  38.     public void setSex(String sex) {    
  39.         this.sex = sex;    
  40.     }    
  41.     
  42.     public String getAddress() {    
  43.         return address;    
  44.     }    
  45.     
  46.     public void setAddress(String address) {    
  47.         this.address = address;    
  48.     }    
  49.     
  50.     @Override    
  51.     public String toString() {    
  52.         return "Person [id=" + id + ", age=" + age + ", name=" + name    
  53.                 + ", sex=" + sex + ", address=" + address + "]";    
  54.     }    
  55.     
  56. }    

其次:生成xml文件的方法如下:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. /**  
  2.      * 生成xml  
  3.      */    
  4.     private void createXml() {    
  5.         XmlSerializer serializer = Xml.newSerializer();// xml文件生成器    
  6.         File file = new File(Environment.getExternalStorageDirectory(),    
  7.                 "person.xml");    
  8.         FileOutputStream fos = null;    
  9.         try {    
  10.             fos = new FileOutputStream(file);    
  11.             serializer.setOutput(fos, "utf-8");// 为xml生成器设置输出流和字符编码    
  12.             serializer.startDocument("utf-8"true);// 开始文档,参数分别为字符编码和是否保持独立    
  13.             serializer.startTag(null"persons"); // 开始标签,参数分别为:命名空间和标签名    
  14.             for (Person person : list) {    
  15.     
  16.                 serializer.startTag(null"person");    
  17.                 serializer.attribute(null"id", person.getId() + "");    
  18.     
  19.                 serializer.startTag(null"name");// 开始标签    
  20.                 serializer.text(person.getName());// 文本内容    
  21.                 serializer.endTag(null"name");// 结束标签    
  22.     
  23.                 serializer.startTag(null"sex");    
  24.                 serializer.text(person.getSex());    
  25.                 serializer.endTag(null"sex");    
  26.     
  27.                 serializer.startTag(null"age");    
  28.                 serializer.text(person.getAge());    
  29.                 serializer.endTag(null"age");    
  30.     
  31.                 serializer.startTag(null"address");    
  32.                 serializer.text(person.getAddress());    
  33.                 serializer.endTag(null"address");    
  34.     
  35.                 serializer.endTag(null"person");    
  36.     
  37.             }    
  38.             serializer.endTag(null"persons");// 结束标签    
  39.             serializer.endDocument();// 结束xml文档    
  40.             Toast.makeText(getApplicationContext(), "生成成功!", Toast.LENGTH_SHORT);    
  41.         } catch (Exception e) {    
  42.             Toast.makeText(getApplicationContext(), "生成失败!", Toast.LENGTH_SHORT);    
  43.             e.printStackTrace();    
  44.         } finally {    
  45.             try {    
  46.                 fos.close();    
  47.             } catch (IOException e) {    
  48.                 e.printStackTrace();    
  49.             }    
  50.         }    
  51.     
  52.     }    

然后是解析xml文件的方法:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. /**  
  2.      * 解析xml文件  
  3.      */    
  4.     private List<Person> pullXml() {    
  5.         try {    
  6.             File file = new File(Environment.getExternalStorageDirectory(),    
  7.                     "person.xml");    
  8.             FileInputStream fis = new FileInputStream(file);    
  9.             List<Person> persons = null;    
  10.             Person person = null;    
  11.             XmlPullParser parser = Xml.newPullParser();// 获取xml解析器    
  12.             parser.setInput(fis, "utf-8");// 参数分别为输入流和字符编码    
  13.             int type = parser.getEventType();    
  14.             while (type != XmlPullParser.END_DOCUMENT) {// 如果事件不等于文档结束事件就继续循环    
  15.                 switch (type) {    
  16.                 case XmlPullParser.START_TAG:    
  17.                     if ("persons".equals(parser.getName())) {    
  18.                         persons = new ArrayList<Person>();    
  19.                     } else if ("person".equals(parser.getName())) {    
  20.                         person = new Person();    
  21.                         String id = parser.getAttributeValue(0);    
  22.                         person.setId(Integer.parseInt(id));    
  23.                     } else if ("name".equals(parser.getName())) {    
  24.                         person.setName(parser.nextText());    
  25.                     } else if ("sex".equals(parser.getName())) {    
  26.                         person.setSex(parser.nextText());    
  27.                     } else if ("address".equals(parser.getName())) {    
  28.                         person.setAddress(parser.nextText());    
  29.                     } else if ("age".equals(parser.getName())) {    
  30.                         person.setAge(parser.nextText());    
  31.                     }    
  32.                     break;    
  33.                 case XmlPullParser.END_TAG:    
  34.                     if ("person".equals(parser.getName())) {    
  35.                         persons.add(person);    
  36.                         person = null;    
  37.                     }    
  38.                     break;    
  39.                 }    
  40.                 type = parser.next();// 继续下一个事件    
  41.             }    
  42.             return persons;    
  43.         } catch (NumberFormatException e) {    
  44.             e.printStackTrace();    
  45.         } catch (FileNotFoundException e) {    
  46.             e.printStackTrace();    
  47.         } catch (XmlPullParserException e) {    
  48.             e.printStackTrace();    
  49.         } catch (IOException e) {    
  50.             e.printStackTrace();    
  51.         }    
  52.         return null;    
  53.     }    

再次是MainActivity里调用的部分代码:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public class MainActivity extends Activity {    
  2.     private Button btn_create = null;    
  3.     private Button btn_pull = null;    
  4.     private TextView tv_show;    
  5.     private List<Person> list = null;    
  6.     
  7.     @Override    
  8.     protected void onCreate(Bundle savedInstanceState) {    
  9.         super.onCreate(savedInstanceState);    
  10.         setContentView(R.layout.activity_main);    
  11.         btn_create = (Button) findViewById(R.id.createXml);    
  12.         btn_pull = (Button) findViewById(R.id.pullXml);    
  13.         tv_show = (TextView) findViewById(R.id.tvShow);    
  14.         list = new ArrayList<Person>();    
  15.         for (int i = 0; i < 5; i++) {    
  16.             Person person = new Person();    
  17.             person.setAge(i + 20 + "");    
  18.             person.setId(i);    
  19.             person.setName("loonggg" + i);    
  20.             person.setSex("男");    
  21.             person.setAddress("中南海" + i + 1 + "大街");    
  22.             list.add(person);    
  23.         }    
  24.         btn_create.setOnClickListener(new View.OnClickListener() {    
  25.     
  26.             @Override    
  27.             public void onClick(View v) {    
  28.                 createXml();    
  29.             }    
  30.         });    
  31.     
  32.         btn_pull.setOnClickListener(new View.OnClickListener() {    
  33.     
  34.             @Override    
  35.             public void onClick(View v) {    
  36.                 tv_show.setText(pullXml().toString());    
  37.             }    
  38.         });    
  39.     }    
  40. }    



转载:http://blog.youkuaiyun.com/chaoyu168/article/details/50556132

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值