解析xml(當節點中有多個子節點)

概要:解析一個xml,當一個節點中又包含多個子節點如何解析,對比一個節點中不包括其餘節點的狀況。java

一,xml樣例ui

<cisReports batNo="查詢批次號" unitName="查詢單位名稱" subOrgan="分支機構名稱" queryUserID="查詢操做員登陸名" queryCount="查詢請求數量" receiveTime="查詢申請時間,格式YYYYMMDD HH24:mm:ss">
    <!-- 如下爲每一個報告申請查得狀況 1..n -->
    <cisReport reportID="報告ID" buildEndTime="報告生成結束時間,格式YYYY-MM-DD HH24:mm:ss" queryReasonID="查詢緣由ID,詳見數據字典" subReportTypes="查詢的收費子報告ID,多個收費子報告ID用逗號分隔" treatResult="對應的收費子報告收費次數,與subReportTypes一一對應,爲大於等於0的值的集合,用逗號分隔" subReportTypesShortCaption="報告查詢類型" refID="引用ID,爲查詢申請條件中的引用ID" hasSystemError="有否系統錯誤,true:有錯誤,false:無錯誤" isFrozen="該客戶是否被凍結,true:被凍結,false:未被凍結">
              <!--  我的基本信息 0..1 -->
        <personBaseInfo subReportType="子報告ID" subReportTypeCost="收費子報告ID" treatResult="子報告查詢狀態,1:查得,2:未查得,3:其餘緣由未查得" treatErrorCode="treatResult=3時的錯誤代碼,詳見數據字典,treatResult!=3時,該屬性不存在" errorMessage="treatResult=3時的錯誤描述信息,treatResult!=3時,該屬性的值爲空">
            <!-- 內容節點,0..1  -->
            <item>
                <!--  最新基本信息 1..1 -->
          //lastBaseInfo節點中不包含其餘節點 <lastBaseInfo> <name>規範化後的姓名</name> <gender>性別代碼:1 男 2女 3 不詳</gender> <birthday>出生日期,格式YYYYMMDD</birthday> <marriageStatus>婚姻情況ID</marriageStatus> <registerAddress>規範化的戶籍地址</registerAddress> <currentAddress>規範化的現住址</currentAddress> <tel>聯繫電話</tel> <mobile>移動電話</mobile> <occupationType>職業ID</occupationType> <positionType>職務ID</positionType> <titleType>職稱ID</titleType> <education>教育程度id</education> <infoDate>信息獲取日期,格式YYYYMMDD,可能爲空。</infoDate> </lastBaseInfo> <!-- 身份警示信息 1..1 -->
          //documentAlert節點中又包含多個item子節點 <documentAlert> <!-- 0..n -->//表明可能包含多個item節點 <item> <name>規範化後的姓名</name> <documentNo>規範化後的證件號碼</documentNo> <documentType>證件類型ID,詳見數據字典</documentType> <country>證件簽發地三位英文國際編碼,詳見數據字典</country> <gender>性別ID,1:男,2:女,3:不詳</gender> <birthday>出生日期,格式YYYYMMDD</birthday> <infoDate>信息獲取日期,格式YYYYMMDD,可能爲空。</infoDate> </item> </documentAlert> </item> </personBaseInfo>

二,代碼編碼

/**
     * @return com.pingan.credit.model.py.ShenZhenPersonalCredit.PersonBaseInfo
     * @Description: 2. 解析 我的基本信息
     * @date 2017/10/9 17:11
     */
    private PersonBaseInfo getPersonBaseInfoNode(Element cisReport) throws Exception {
        // 獲取節點屬性
        Element personBaseInfoElement = cisReport.element("personBaseInfo");
        PersonBaseInfo personBaseInfo = null;
        if (personBaseInfoElement != null) {
            List<Attribute> personBaseInfoList = personBaseInfoElement.attributes();

            Map<String, String> attributeMap = personBaseInfoList.stream()
                    .collect(Collectors.toMap(Attribute::getName, Attribute::getValue));
            personBaseInfo = (PersonBaseInfo) CommonUtils.setValueOfSuperClass(PersonBaseInfo.class, attributeMap);

            //treatResult=1 表示查詢狀態 查得
            if (SUCCESS.equals(attributeMap.get(TREAT_RESULT))) {
                Element item = personBaseInfoElement.element("item");
                if (item != null) {
                    //2 最新基本信息
            //解析單個節點,不包含子節點 Element lastBaseElement = item.element("lastBaseInfo"); if (lastBaseElement != null) { List<Element> lastBaseInfoList = item.element("lastBaseInfo").elements(); Map<String, String> lastBaseInfoListResultMap = XmlUtil.getResultMap(lastBaseInfoList); LastBaseInfo lastBaseInfo = new LastBaseInfo(); personBaseInfo.setLastBaseInfo((LastBaseInfo) CommonUtils.setValue(lastBaseInfo, lastBaseInfoListResultMap)); } //6 身份警示信息
            //節點中包含多個子節點 Element documentAlertElement = item.element("documentAlert"); if (documentAlertElement != null) { List<Element> documentAlertList = item.element("documentAlert").elements(); if (!ListUtil.isEmpty(documentAlertList)) { List<DocumentAlert> itemList = new ArrayList<>();
                 //遍歷子節點,獲取每一個子節點中節點內容
for (Element e : documentAlertList) { DocumentAlert documentAlert = new DocumentAlert(); documentAlert = (DocumentAlert) CommonUtils.setValue(documentAlert, XmlUtil.getResultMap(e.elements())); itemList.add(documentAlert); } personBaseInfo.setDocumentAlerts(itemList); } } } } } return personBaseInfo; }

解析節點反射賦值spa

    /**
     * 將元素節點轉換成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;
    }
    /**
     * @param object, resultMap
     * @return java.lang.Object
     * @Description: 經過反射爲實體類賦值
     * @date 2017/8/30 9:43
     */
    public static Object setValue(Object object, Map<String, String> resultMap) throws Exception {
        try {
            Class<?> obj = object.getClass();
            Field[] fields = obj.getDeclaredFields();
            setValue(object, resultMap, fields);

            return object;
        } catch (IllegalAccessException e) {
            logger.info("IllegalAccessException@CommonUtils:" + e.getMessage());
            throw e;
        } catch (Exception e) {
            logger.info("Exception@CommonUtils:" + e.getMessage());
            throw e;
        }
    }
相關文章
相關標籤/搜索