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


    首先,我把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<Person> pullXml() {  
            try {  
                File file = new File(Environment.getExternalStorageDirectory(),  
                        "person.xml");  
                FileInputStream fis = new FileInputStream(file);  
                List<Person> 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<Person>();  
                        } 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<Person> 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<Person>();  
            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());  
                }  
            });  
        }  
    }  





  • 相关阅读:
    iOS必备知识点
    stringByReplacingOccurrencesOfString
    iPhone X 设计适配指南 & iOS 11 新特性
    block与property
    swift开发笔记04
    category重写系统方法的调用顺序是怎么样的?
    Error: Chunk.entry was removed. Use hasRuntime()错误解决
    李阳音标速成MP3文本
    JavaScript权威指南(第6版)(中文版)笔记
    Idea检入boss项目
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7261278.html
Copyright © 2020-2023  润新知