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的首选。

 

 

posted on 2014-02-19 16:06  二十年梨花  阅读(429)  评论(0编辑  收藏  举报