zoukankan      html  css  js  c++  java
  • Android知识整理(1) Pull解析器解析XML

    Pull解析器是android自带的xml解析工具,可以在程序中直接使用,不需要引入jar包。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <persons>
     3   <person id="01">
     4     <name>张三</name>
     5        <sex></sex>
     6     <age>18</age>
     7   </person>
     8   <person id="02">
     9     <name>李四</name>
    10        <sex></sex>
    11     <age>25</age>
    12   </person>
    13 </persons>

    以上面的xml为例:
    首先,我们需要一个javaBean,android不推荐get、set,但是影响并不大,就不要在意这些细节了。

    public class Person {
    
        private String id="";
        private String name="";
        private String sex="";
        private int age=0;
    
        public Person() {
            // TODO Auto-generated constructor stub
        }
        
        public void setId(String id){
            this.id=id;
        }
        public void setName(String name) {
            this.name = name;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
        public String getId(){
            return id;
        }
        public String getName() {
            return name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public int getAge() {
            return age;
        }
    }

    然后,通过XmlPullParser.getEventType()判断开始结束,XmlPullParser.getName()获得标签,XmlPullParser.getText()获得内容。不要忘记XmlPullParser.next()。

    public List<Person> parse(InputStream in) {
            XmlPullParser parser = Xml.newPullParser();
            try {
                parser.setInput(in, "UTF-8");
                int eventType = parser.getEventType();// 返回当前事件类型
                Person person = null;
                List<Person> persons = null;
                while (eventType != XmlPullParser.END_DOCUMENT) {
                    switch (eventType) {
                    case XmlPullParser.START_DOCUMENT:
                        
                        persons=new ArrayList<Person>();
                        
    
                        break;
                    case XmlPullParser.START_TAG:
                        
                        String name=parser.getName();
                        if("person".equalsIgnoreCase(name)){
                            
                            person=new Person();
                        }else if("id".equalsIgnoreCase(name)&&person!=null){
                            eventType = parser.next();//不要忘了这里
                            person.setId(parser.getText());
                            
                        }else if("name".equalsIgnoreCase(name)&&person!=null){
                            eventType = parser.next();
                            person.setName(parser.getText());
                        }else if("sex".equalsIgnoreCase(name)&&person!=null){
                            eventType = parser.next();
                            person.setSex(parser.getText());
                        }else if("age".equalsIgnoreCase(name)&&person!=null){
                            eventType = parser.next();
                            person.setAge(Integer.parseInt(parser.getText()));
                        }
                        
                        break;
                    case XmlPullParser.END_TAG:
                        if("person".equalsIgnoreCase(parser.getName())&&person!=null){
                            persons.add(person);
                            person=null;
                        }
    
                        break;
                    default:
                        break;
                    }
                    eventType = parser.next();
                }
                in.close();
                return persons;
            } catch (XmlPullParserException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }


    OK,大功告成了。

    xml解析还有很多其他方法,SAX、DOM、DOM4J、JDOM等等。PULL相对其他解析器而言,占用内存小,效率也不错,使用灵活。通常情况下,是Android应用中解析Xml的首选。

  • 相关阅读:
    赋值运算符函数
    系统设计面试题分析
    内核线程和用户线程的区别
    线程和进程区别
    TCP程序设计
    UDP程序设计
    死锁,死锁必要条件及处理策略
    Linux进程同步机制
    Windows与Linux下进程间通信技术比较
    Windows下进程通信方式
  • 原文地址:https://www.cnblogs.com/lihualuo/p/3556093.html
Copyright © 2011-2022 走看看