dom4j解析XML

import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.codec.binary.Base64;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
private List<YDElectronWayBillRespVO> resolvePlaceOrderResp(String resp, boolean isUseCustomerYDElectronWaybillFlag,  Map<Integer, YDWayBillPrintNoticeLAndPickLDto> noticeAndPickMap) {
        if (logger.isDebugEnabled()){
            logger.debug("two-dimension sys place order response:" + resp);
        }
        SAXReader saxReader = new SAXReader();
        Document document = null;
        try {
            document = saxReader.read(new ByteArrayInputStream(resp.getBytes()));
        } catch (Exception e) {
            logger.error("解析下单接口返回结果异常:" + e);
            e.printStackTrace();
        }
        
        if (null == document) {
            logger.error("下单接口无返回结果。");
            throw new YDIllegalArgumentException("下单接口无返回结果。");
        }
        
        Element root = document.getRootElement();
        List<Element> elements = root.elements("response");
        List<YDElectronWayBillRespVO> vos = new ArrayList<YDElectronWayBillRespVO>();
        for (Element ele : elements){
            YDElectronWayBillRespVO vo = new YDElectronWayBillRespVO();
            Node serialNo = ele.element("order_serial_no"); // 唯一序列号
            Node status = ele.element("status");    // 发送状态
            Node msg = ele.element("msg");          // 返回消息
            Node waybillNo = ele.element("mail_no"); // 运单号
            Node pdfData = ele.element("pdf_info"); // PDF数据
            //System.out.println("返回数据:" + pdfData.getText().trim());
            Map<String, String> parameterMap = new HashMap<>();
            vo.setResult(status.getText().trim());
            //如果使用自定义电子面单模板,则将返回的明文信息取出
            if ("1".equals(status.getText().trim()) && isUseCustomerYDElectronWaybillFlag) {
                try {
                    parameterMap = (Map<String, String>) JSON.parse(JSON.parseArray(JSON.parseArray(pdfData.getText().trim()).toArray()[0].toString()).toArray()[0].toString());
                    vo.setSenderBranchJc(parameterMap.get("sender_branch_jc"));
                    vo.setSenderName(parameterMap.get("sender_name"));
                    vo.setSenderAreaNames(parameterMap.get("sender_area_names"));
                    vo.setSenderCompany(parameterMap.get("sender_company"));
                    vo.setSenderPostcode(parameterMap.get("sender_postcode"));
                    vo.setSenderAddress(parameterMap.get("sender_address"));
                    vo.setPackageWd(parameterMap.get("package_wd"));
                    vo.setPackageWdjc(parameterMap.get("package_wdjc"));
                    vo.setSenderMobile(parameterMap.get("sender_mobile"));
                    vo.setSenderPhone(parameterMap.get("sender_phone"));
                    vo.setQrcode(parameterMap.get("qrcode"));
                    vo.setMailnoBarcode(parameterMap.get("mailno_barcode"));
                    vo.setPositionNo(parameterMap.get("position_no"));
                    vo.setPosition(parameterMap.get("position"));
                    vo.setReceiverName(parameterMap.get("receiver_name"));
                    vo.setReceiverCompany(parameterMap.get("receiver_company"));
                    vo.setReceiverAreaNames(parameterMap.get("receiver_area_names"));
                    vo.setReceiverPostcode(parameterMap.get("receiver_postcode"));
                    vo.setReceiverAddress(parameterMap.get("receiver_address"));
                    vo.setReceiverPhone(parameterMap.get("receiver_phone"));
                    vo.setReceiverMobile(parameterMap.get("receiver_mobile"));
                    vo.setSize(parameterMap.get("size"));
                    vo.setWeight(parameterMap.get("weight"));
                    vo.setMailType(parameterMap.get("mail_type"));
                    vo.setEmsFlag(parameterMap.get("ems_flag"));
                    vo.setCusArea1(parameterMap.get("cus_area1"));
                    vo.setCusArea2(parameterMap.get("cus_area2"));
                    vo.setCusArea3(parameterMap.get("cus_area3"));
                    vo.setOrderId(parameterMap.get("order_id"));
                    vo.setOrderType(parameterMap.get("order_type"));
                    vo.setStatus(parameterMap.get("status"));
                    vo.setTime(parameterMap.get("time"));
                    vo.setBigpenCode(parameterMap.get("bigpen_code"));
                    vo.setPositionZz(parameterMap.get("position_zz"));
                    vo.setTradeCode(parameterMap.get("trade_code"));
                    vo.setLatticeMouthNo(parameterMap.get("lattice_mouth_no"));
                    if (null != noticeAndPickMap && noticeAndPickMap.size() > 0) {
                        String serialNoString = serialNo.getText().trim();
                        Integer onhId = Integer.parseInt(serialNoString.substring(ORDER_SERIAL_NO_PREFIX.length(), serialNoString.lastIndexOf("_")));
                        YDWayBillPrintNoticeLAndPickLDto noticeLAndPickLDto = noticeAndPickMap.get(onhId);
                        vo.setOwnName(noticeLAndPickLDto.getOnhOwnerName());
                        vo.setOnhRemark(noticeLAndPickLDto.getOnhRemark());
                        vo.setOnhCellNo(noticeLAndPickLDto.getOnhCellNo());
                        vo.setNoticeItems(noticeLAndPickLDto.getNoticeItems());
                        vo.setPickItems(noticeLAndPickLDto.getPickItems());
                        vo.setOnhBuyerMessage(noticeLAndPickLDto.getOnhBuyerMessage());
                        vo.setOnhSellerMessage(noticeLAndPickLDto.getOnhSellerMessage());
                        vo.setOnhBuyerNickname(noticeLAndPickLDto.getOnhBuyerNickname());
                        vo.setOnhPlatformName(noticeLAndPickLDto.getOnhPlatformName());
                        vo.setOnhShopName(noticeLAndPickLDto.getOnhShopName());
                        vo.setOnhNoticeNo(noticeLAndPickLDto.getOnhNoticeNo());
                        vo.setOnhOwnerNo(noticeLAndPickLDto.getOnhOwnerNo());
                        vo.setOnhIsCod(noticeLAndPickLDto.getOnhIsCod());
                        vo.setOnhCodAmount(noticeLAndPickLDto.getOnhCodAmount());
                        vo.setOnhParcelInsurance(noticeLAndPickLDto.getOnhParcelInsurance());
                        vo.setOnhInsuranceAmount(noticeLAndPickLDto.getOnhInsuranceAmount());
                        vo.setOnhWaveNo(noticeLAndPickLDto.getOnhWaveNo());
                        vo.setOnhWaveRoundNo(noticeLAndPickLDto.getOnhWaveRoundNo());
                    }
                    
                } catch (Exception e) {
                    String errorMsg = "";
                    logger.error(errorMsg);
                    throw new YDIllegalArgumentException(errorMsg);
                }
            }
            
            vo.setSerialNo(serialNo.getText().trim());
            vo.setWaybillNo(waybillNo.getText().trim());
            vo.setRemark(msg.getText().trim());
            vo.setPdfInfo(pdfData.getText().trim());
            vo.setResult(status.getText().trim());
            vo.setQrcode(vo.getWaybillNo() + "," + vo.getTime() + "," + vo.getPackageWdjc());
            vos.add(vo);
        }
        return vos;
    }
原文地址:https://www.cnblogs.com/tonggc1668/p/7473979.html