XML解析(pull解析)

来源:互联网 发布:淘宝店铺排行榜怎么看 编辑:程序博客网 时间:2024/05/01 15:13

pull解析

封装实体类

public class User {    private String id;    private String uname;    private String phone;    private String mobil;    private String addr;    @Override    public String toString() {        return "User [id=" + id + ", uname=" + uname + ", phone=" + phone                + ", mobil=" + mobil + ", addr=" + addr + ", email=" + email                + "]";    }    private String email;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getUname() {        return uname;    }    public void setUname(String uname) {        this.uname = uname;    }    public String getPhone() {        return phone;    }    public void setPhone(String phone) {        this.phone = phone;    }    public String getMobil() {        return mobil;    }    public void setMobil(String mobil) {        this.mobil = mobil;    }    public String getAddr() {        return addr;    }    public void setAddr(String addr) {        this.addr = addr;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }

解析

    private void pullParseXml() {        //1.通过Xml的newPullParser方法获取一个对象XmlPullParser        XmlPullParser parser = Xml.newPullParser();        try {            //2.设置要解析的文件            parser.setInput(getAssets().open("contacts.xml"), "utf-8");            boolean isNOTEOF = true;//没有到文件结尾            String tagname = "";//记录节点名称            //3.开始解析文档--返回值是五种事件类型            int event = parser.getEventType();            User u = null;            //6.想办法把解析文档的代码循环起来            while(isNOTEOF){                //4.判断解析文档事件源属于哪一种事件类型                switch (event) {                    case XmlPullParser.START_DOCUMENT://文档开始                        //初始化动作                        userlist = new ArrayList<User>();                        break;                    case XmlPullParser.START_TAG://节点开始                        //获取节点名称                        tagname = parser.getName();                        if(tagname.equals("user")){                            u = new User();                            u.setId(parser.getAttributeValue(null, "id"));                            u.setUname(parser.getAttributeValue(null, "uname"));                        }                        break;                    case XmlPullParser.TEXT://文本内容                        if(tagname.equals("phone")){                            //取电话-文本内容                            u.setPhone(parser.getText());                        }else if(tagname.equals("mobil")){                            u.setMobil(parser.getText());                        }else if(tagname.equals("addr")){                            u.setAddr(parser.getText());                        }else if(tagname.equals("email")){                            u.setEmail(parser.getText());                        }                        break;                    case XmlPullParser.END_TAG://节点结束                        tagname = parser.getName();                        if(tagname.equals("user")){                            userlist.add(u);                        }                        //在节点结束时,重新初始化节点名称(以防空节点内容覆盖正常节点文本内容)                        tagname = "";                        break;                    case XmlPullParser.END_DOCUMENT://文档结束                        //循环结束的标识,很关键,否则死循环                        isNOTEOF = false;                        break;                }                //5.接着解析下一行(一定不能忘记,否则程序不会往下执行)                event = parser.next();            }        } catch (XmlPullParserException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }
0 0