没想到公司用的是xml方法进行数据交互

   接手一个新项目,拿到接口文档一看,一万个草泥马在心中飘过!与后台的数据交互方式竟然是xml数据,其实也没啥了,个人用json习惯了,做了那么多项目就没碰过用xml的,没办法,就是干!一开始自己也是傻逼了,竟然用Pull解析一个一个的将xml数据解析成实体类,一个实体类对应一个解析方法,也是醉了!好在及时醒悟,毕竟xml数据也是有规律的,于是封装了个万能的方法,只针对此项目的哈,在此做个记录:

   1.先看下数据形式:

 private String xmlString="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<root><msgname>user/queryUserInfo</msgname><transactionid>1241241</transactionid>" +
            "<timestamp></timestamp><result>000000</result><resultdesc>请求成功</resultdesc>" +
            "<body><name>vitor</name><identitycardno>1234568797994564</identitycardno>" +
            "<photo>adfsadfads</photo><birthdate>1990-12-26</birthdate><validdate>456</validdate><address>深圳</address><signorg>opsdf</signorg><nation>汉</nation>" +
            "<sex></sex><mobile>15019297974</mobile><email>wuzq@qq.com</email><accountno>00118881000030200009</accountno>" +
            "<isrealname>0</isrealname><username>wuzq</username><retcode>000000</retcode><retmsg></retmsg></body></root>";
   2.解析数据:

    (1)创建实体类:

public class UserInfo {

    private String name;
    private String identitycardno;
    private String photo;
    private String birthdate;
    private String validdate;
    private String address;
    private String signorg;
    private String nation;
    private String sex;
    private String mobile;
    private String retcode;
    private String retmsg;
    private int isrealname;
    private String accountno;
    private String email;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAccountno() {
        return accountno;
    }

    public void setAccountno(String accountno) {
        this.accountno = accountno;
    }

    public int getIsrealname() {
        return isrealname;
    }

    public void setIsrealname(int isrealname) {
        this.isrealname = isrealname;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getIdentitycardno() {
        return identitycardno;
    }

    public void setIdentitycardno(String identitycardno) {
        this.identitycardno = identitycardno;
    }

    public String getPhoto() {
        return photo;
    }

    public void setPhoto(String photo) {
        this.photo = photo;
    }

    public String getBirthdate() {
        return birthdate;
    }

    public void setBirthdate(String birthdate) {
        this.birthdate = birthdate;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getValiddate() {
        return validdate;
    }

    public void setValiddate(String validdate) {
        this.validdate = validdate;
    }

    public String getSignorg() {
        return signorg;
    }

    public void setSignorg(String signorg) {
        this.signorg = signorg;
    }

    public String getNation() {
        return nation;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "name='" + name + '\'' +
                ", identitycardno='" + identitycardno + '\'' +
                ", photo='" + photo + '\'' +
                ", birthdate='" + birthdate + '\'' +
                ", validdate='" + validdate + '\'' +
                ", address='" + address + '\'' +
                ", signorg='" + signorg + '\'' +
                ", nation='" + nation + '\'' +
                ", sex='" + sex + '\'' +
                ", mobile='" + mobile + '\'' +
                ", retcode='" + retcode + '\'' +
                ", retmsg='" + retmsg + '\'' +
                ", isrealname=" + isrealname +
                ", accountno='" + accountno + '\'' +
                ", email='" + email + '\'' +
                '}';
    }

    public void setNation(String nation) {
        this.nation = nation;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getRetcode() {
        return retcode;
    }

    public void setRetcode(String retcode) {
        this.retcode = retcode;
    }

    public String getRetmsg() {
        return retmsg;
    }

    public void setRetmsg(String retmsg) {
        this.retmsg = retmsg;
    }
}

    (2)利用反射封装解析方法:

 public static <T>T xmlToObject(String xmlResult, Class<T> clz, String tagName){
        XmlPullParser parser= Xml.newPullParser();
        T t=null;
        try {
            parser.setInput(new ByteArrayInputStream(xmlResult.getBytes("UTF-8")),"UTF-8");
            int eventType=parser.getEventType();
            while (eventType!=XmlPullParser.END_DOCUMENT){
                switch (eventType){
                    case XmlPullParser.START_DOCUMENT:{
                    }break;
                    case XmlPullParser.START_TAG:{
                        if (t != null) {
                            try {
                                Field field = clz.getDeclaredField(parser.getName());
                                if (field != null) {
                                    field.setAccessible(true);
                                    String type = field.getType().getSimpleName();
                                    if (type.contains("String")) {
                                        field.set(t, parser.nextText());
                                    } else if (type.contains("int")) {
                                        field.set(t,Integer.valueOf(parser.nextText()));
                                    } else if (type.contains("boolean")) {
                                        field.set(t,Boolean.valueOf(parser.nextText()));
                                    } else if (type.contains("float")) {
                                        field.set(t,Float.valueOf(parser.nextText()));
                                    } else if (type.contains("double")) {
                                        field.set(t,Double.valueOf(parser.nextText()));
                                    }else if (type.contains("long")) {
                                        field.set(t,Long.valueOf(parser.nextText()));
                                    }
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                        if (tagName.equals(parser.getName())){
                            t=clz.newInstance();
                        }

                    }break;
                    case XmlPullParser.END_TAG:{

                    }break;
                }
                eventType=parser.next();
            }
            return t;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return  null;
    }

(3)查看demo

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值