解析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; }
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM