XML解析(pull解析)

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值