解析xml格式字符串

解析xml格式字符串

由于写接口时,总有人会传一些xml格式的字符串,节点少时可以一一获取,但是如果有大量的子节点时,可以使用反射机制实现实体类接收xml格式字符串数据,只需要保证节点名称和实体类字段一直即可

实体类定义:

public class Bean implements java.io.Serializable {
    private static final long serialVersionUID = -6200369508299727830L;
    private Long name;
    public Double getName() {
        return name;
    }
    public void setName(Double name) {
        name= name;
    }
}

解析xml格式字符串代码:

//解析xml格式字符串和TReportMonth实体类对应
    public static Bean parseXmlStr(String xml) throws Exception {

        // 将字符串转化为XML文档对象
        Document document = DocumentHelper.parseText(xml);
        // 获得文档的根节点
        Element root = document.getRootElement();
        // 遍历根节点下所有子节点
        Iterator<?> iter = root.elementIterator();

        //新建实体类
        Bean bean = new Bean();
        Class<?> c = Class.forName("包名.Bean");
        bean = (Bean) c.newInstance();// 创建这个实体的对象
        while (iter.hasNext()) {
            Element ele = (Element) iter.next();
            // 获取set方法中的参数字段(实体类的属性)
            Field field = c.getDeclaredField(ele.getName());
            // 获取set方法,field.getType())获取它的参数数据类型
            Method declaredMethod = c.getDeclaredMethod("set" + ele.getName(), field.getType());
            // 调用set方法
            // 如果标签内有值再进行转换
            if(ele.getText()!=null && !"".equals(ele.getText())){
                //字符串,日期,其他引用类型分别处理
                if (field.getType() == String.class){
                    declaredMethod.invoke(bean, ele.getText());
                }else if(!"Date".equals(field.getType().getSimpleName())){
                    // java.lang下面类型通用转换函数
                    Class<?> class1 = Class.forName(field.getType().getName());
                    Method method = class1.getMethod("parse" + field.getType().getSimpleName(),String.class);
                    if (method != null) {
                        Object ret = method.invoke(null, ele.getText().toString());
                        if (ret != null);
                        declaredMethod.invoke(bean, ret);
                    }
                    //日期格式单独处理
                }else{
                    String strDate = ele.getText();
                    Date date = null;
                    try {
                        date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(strDate);
                    } catch (ParseException e) {

                    }
                    declaredMethod.invoke(bean, date);
                }
            }

        }
        return Bean;
    }

xml格式字符串示例

<ReqStr>
    <name>1</name>
</ReqStr>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值