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; }
     
  • 相关阅读:
    js 脚本学习 索引
    nodejs 学习索引
    oracle 学习 笔记
    githut 的 管理 使用
    sublime text 插件记录
    web 学习 相关索引
    wpf 自定义 无边框 窗体 resize 实现
    vs 效率工具
    ANDROID开发实用小工具
    iOS开发之Core Animation
  • 原文地址:https://www.cnblogs.com/shenkebky/p/8304081.html
Copyright © 2011-2022 走看看