zoukankan      html  css  js  c++  java
  • 解析xml节点属性及子节点内容

    xml样例

     <microNearlyThreeYearsOverdueInfo subReportType="13204" subReportTypeCost="96040" treatResult="子报告查询状态,1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3时的错误代码,详见数据字典,treatResult!=3时,该属性不存在" errorMessage="treatResult=3时的错误描述信息,treatResult!=3时,该属性的值为空">
         <!--treatresult为2、3时没有以下节点-->
         <!--逾期汇总信息 0..1-->
        <stat>
         <overdueAmount>逾期本金,单位:以贷款基本信息的币种为准</overdueAmount>
         <overdueDays>逾期天数区间,取值区间:逾期1天(含)以上</overdueDays>
         <overdueCount>逾期天数区间的总笔数</overdueCount>
        </stat>

    </microNearlyThreeYearsOverdueInfo>

    定义实体并解析

    父类:CommonField

    public class CommonField extends BasePojo {
        private String treatResult;//子报告查询状态,1:查得,2:未查得,3:其他原因未查得
        private String errorMessage;//treatResult=3时的错误描述信息,treatResult!=3时,该属性的值为空

    子类:MicroNearlyThreeYearsOverdueInfo

    public class MicroNearlyThreeYearsOverdueInfo extends CommonField implements Serializable {
        private String overdueAmount;//逾期本金,单位:以贷款基本信息的币种为准
        private String overdueDays;//逾期天数区间,取值区间:逾期1-6天,逾期7-29天,逾期30-59天,逾期60-89天,逾期90天(含)以上
        private Integer overdueCount;//逾期天数区间的笔数

    一,解析节点属性

     Element microNearlyThreeYearsOverdueInfoElement = cisReport.element("microNearlyThreeYearsOverdueInfo");
            List<Attribute> microNearlyThreeYearsOverdueInfoAttributeList = microNearlyThreeYearsOverdueInfoElement
                    .attributes();
         //(1)把属性数据复制给实体 先转map MicroNearlyThreeYearsOverdueInfo mtyoi
    = getMicroNearlyThreeYearsOverdueInfoNode(microNearlyThreeYearsOverdueInfoElement, microNearlyThreeYearsOverdueInfoAttributeList); re.setMicroNearlyThreeYearsOverdueInfo(mtyoi);

    //(1)把属性数据复制给实体 先转map
     private MicroNearlyThreeYearsOverdueInfo getMicroNearlyThreeYearsOverdueInfoNode(Element element,
                                                                                         List<Attribute> attributeList) throws Exception {
            try {
                // 获取网贷逾期信息的全部属性
                Map<String, String> attributeMap = attributeList.stream()
                        .collect(Collectors.toMap(Attribute::getName, Attribute::getValue));
                //(2)属性赋值给父类
                MicroNearlyThreeYearsOverdueInfo obj = (MicroNearlyThreeYearsOverdueInfo) CommonUtils.setValueOfSuperClass(MicroNearlyThreeYearsOverdueInfo.class,
                        attributeMap);
                if ("1".equals(obj.getTreatResult())) {
                    //(3)解析子节点-逾期汇总信息
                    getMicroNearlyThreeYearsOverDueTotalInfo(element, obj);
                    //  详细信息
                    getMicroNearlyThreeYearsOverdueSummaryInfo(element, obj);
                }
    
                return obj;
            } catch (Exception e) {
                logger.error("getMicroNearlyThreeYearsOverdueInfoNode@PyserviceImpl_Exception", e);
                throw e;
            }
    
        }
    (2)属性赋值给父类
    /**
         * @param clazz, attributeMap
         * @return java.lang.Object
         * @Description: 通过反射给目标对象的父类设置属性
         * @date 2017/8/30 9:42
         */
        public static Object setValueOfSuperClass(Class<?> clazz, Map<String, String> attributeMap) throws Exception {
            try {
                Object object = Class.forName(clazz.getName()).newInstance();
                Class<?> obj = object.getClass().getSuperclass();
                Field[] fields = obj.getDeclaredFields();
                setValue(object, attributeMap, fields);
                return object;
            } catch (Exception e) {
                logger.info(e.getMessage());
                throw e;
            }
        }
     

    二,解析子节点内容
    上://(3)解析子节点-逾期汇总信息

     private MicroNearlyThreeYearsOverdueInfo getMicroNearlyThreeYearsOverDueTotalInfo(Element element,
                                                                                          MicroNearlyThreeYearsOverdueInfo obj) {
            Element eStat = element.element("stat");
            if (eStat != null) {
                List<Element> statlist = eStat.elements();
                //解析节点内容
                //方式一,遍历List<Element>,调用e.elementText()
                if (!ListUtil.isEmpty(statlist)) {
                    for (Element e : statlist) {
                        String overdueAmount = e.elementText("overdueAmount");
                        String overdueDays = e.elementText("overdueDays");
                        String overdueCount = e.elementText("overdueCount");
                    }
                }
               //方式二,List<Element>转化为map<节点名称,节点值>
                if (!ListUtil.isEmpty(statlist)) {
                    //(4)List<Element>转化为map<节点名称,节点值>
                    Map<String, String> resultMap = XmlUtil.getResultMap(statlist);
                    obj.setOverdueAmount(resultMap.get("overdueAmount"));
                    obj.setOverdueDays(resultMap.get("overdueDays"));
                    obj.setOverdueCount(Integer.valueOf(resultMap.get("overdueCount")));
                }
    
            }
            return obj;
        }
        /**
         * 将元素节点转换成map
         */
    (4)List<Element>转化为map<节点名称,节点值> public static Map<String, String> getResultMap(List<Element> items) { Map<String, String> map = new HashMap<>(32); for (Element e : items) { if (StringUtils.isNotEmpty(e.getData().toString())) { map.put(e.getName(), e.getData().toString()); } } return map; }
     
  • 相关阅读:
    Mac下tomcat的安装与配置
    jquery中的属性和css
    jquery中的选择器
    数组对象元素的添加,String对象,BOM对象以及文档对象的获取
    js中的函数,Date对象,Math对象和数组对象
    js中的循环语句
    js中的运算符和条件语句
    js中的数据类型及其转换
    js的意义,引用方法及变量
    移动端网页项目总结
  • 原文地址:https://www.cnblogs.com/shenkebky/p/8304081.html
Copyright © 2011-2022 走看看