博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中XML文件的序列化生成与解析
阅读量:7234 次
发布时间:2019-06-29

本文共 6741 字,大约阅读时间需要 22 分钟。

首先,我把Person的实体类

package net.loonggg.test;    public class Person {      private int id;      private String age;      private String name;      private String sex;      private String address;        public int getId() {          return id;      }        public void setId(int id) {          this.id = id;      }        public String getAge() {          return age;      }        public void setAge(String age) {          this.age = age;      }        public String getName() {          return name;      }        public void setName(String name) {          this.name = name;      }        public String getSex() {          return sex;      }        public void setSex(String sex) {          this.sex = sex;      }        public String getAddress() {          return address;      }        public void setAddress(String address) {          this.address = address;      }        @Override      public String toString() {          return "Person [id=" + id + ", age=" + age + ", name=" + name                  + ", sex=" + sex + ", address=" + address + "]";      }    }
其次:生成xml文件的方法如下:

/**      * 生成xml      */      private void createXml() {          XmlSerializer serializer = Xml.newSerializer();// xml文件生成器          File file = new File(Environment.getExternalStorageDirectory(),                  "person.xml");          FileOutputStream fos = null;          try {              fos = new FileOutputStream(file);              serializer.setOutput(fos, "utf-8");// 为xml生成器设置输出流和字符编码              serializer.startDocument("utf-8", true);// 开始文档,参数分别为字符编码和是否保持独立              serializer.startTag(null, "persons"); // 开始标签,参数分别为:命名空间和标签名              for (Person person : list) {                    serializer.startTag(null, "person");                  serializer.attribute(null, "id", person.getId() + "");                    serializer.startTag(null, "name");// 开始标签                  serializer.text(person.getName());// 文本内容                  serializer.endTag(null, "name");// 结束标签                    serializer.startTag(null, "sex");                  serializer.text(person.getSex());                  serializer.endTag(null, "sex");                    serializer.startTag(null, "age");                  serializer.text(person.getAge());                  serializer.endTag(null, "age");                    serializer.startTag(null, "address");                  serializer.text(person.getAddress());                  serializer.endTag(null, "address");                    serializer.endTag(null, "person");                }              serializer.endTag(null, "persons");// 结束标签              serializer.endDocument();// 结束xml文档              Toast.makeText(getApplicationContext(), "生成成功!", Toast.LENGTH_SHORT);          } catch (Exception e) {              Toast.makeText(getApplicationContext(), "生成失败!", Toast.LENGTH_SHORT);              e.printStackTrace();          } finally {              try {                  fos.close();              } catch (IOException e) {                  e.printStackTrace();              }          }        }
然后是解析xml文件的方法:

/**      * 解析xml文件      */      private List
pullXml() { try { File file = new File(Environment.getExternalStorageDirectory(), "person.xml"); FileInputStream fis = new FileInputStream(file); List
persons = null; Person person = null; XmlPullParser parser = Xml.newPullParser();// 获取xml解析器 parser.setInput(fis, "utf-8");// 参数分别为输入流和字符编码 int type = parser.getEventType(); while (type != XmlPullParser.END_DOCUMENT) {// 如果事件不等于文档结束事件就继续循环 switch (type) { case XmlPullParser.START_TAG: if ("persons".equals(parser.getName())) { persons = new ArrayList
(); } else if ("person".equals(parser.getName())) { person = new Person(); String id = parser.getAttributeValue(0); person.setId(Integer.parseInt(id)); } else if ("name".equals(parser.getName())) { person.setName(parser.nextText()); } else if ("sex".equals(parser.getName())) { person.setSex(parser.nextText()); } else if ("address".equals(parser.getName())) { person.setAddress(parser.nextText()); } else if ("age".equals(parser.getName())) { person.setAge(parser.nextText()); } break; case XmlPullParser.END_TAG: if ("person".equals(parser.getName())) { persons.add(person); person = null; } break; } type = parser.next();// 继续下一个事件 } return persons; } catch (NumberFormatException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; }
再次是MainActivity里调用的部分代码:

public class MainActivity extends Activity {      private Button btn_create = null;      private Button btn_pull = null;      private TextView tv_show;      private List
list = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_create = (Button) findViewById(R.id.createXml); btn_pull = (Button) findViewById(R.id.pullXml); tv_show = (TextView) findViewById(R.id.tvShow); list = new ArrayList
(); for (int i = 0; i < 5; i++) { Person person = new Person(); person.setAge(i + 20 + ""); person.setId(i); person.setName("loonggg" + i); person.setSex("男"); person.setAddress("中南海" + i + 1 + "大街"); list.add(person); } btn_create.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { createXml(); } }); btn_pull.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { tv_show.setText(pullXml().toString()); } }); } }

转载地址:http://mhvfm.baihongyu.com/

你可能感兴趣的文章