dom4j操作xml

dom4j操作xml

在这里插入图片描述
我的使用:

需求:

在这里插入图片描述
需要的数据格式
在这里插入图片描述

在这里插入图片描述

代码;将获取的数据,拼装成给定的xml格式
(1) 定时获取半小时内的日志数据

package com.hisign.dzpt.web.schedule;

import com.alibaba.fastjson.JSON;
import com.hisign.dzpt.api.entity.sys.SysLog;
import com.hisign.dzpt.api.entity.sys.SysLogUserOpt;
import com.hisign.dzpt.api.service.sys.SysLogUserOptService;
import com.hisign.dzpt.api.service.sys.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Component
@EnableScheduling
public class PushLog {

    public static final Logger logger = LoggerFactory.getLogger(PushLog.class);

    @Value("${RegID}")
    private String RegID;

    @Autowired
    private UserService userService;

    @Autowired
    private SysLogUserOptService sysLogUserOptService;

    /**
     *  0 0/30 * * * ?   半小时,推送一次日志,标识就是当前时间,向前半小时
     * 0 0 * * * ?  每小时
     */
    @Scheduled(cron = "0/30 * * * * ?")
    public void push() throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //当前时间减去半小时
        //当前时间
        long queryTime = new Date().getTime() - 1800000;
        String format = dateFormat.format(queryTime);
        Date queryDate = dateFormat.parse(format);
        ///String time = "2021-09-24 01:59:59";
        ///Date queryDate = dateFormat.parse(time);

        //半小时的登录日志 类型 : 登录
        List<SysLog> sysLogList = userService.getAllLoginLogs(queryDate);
        logger.info("推送半小时的日志, 登录日志数量为 : " + sysLogList.size());
        logger.info("推送半小时的日志, 登录日志 : " + JSON.toJSONString(sysLogList));

        //半小时的操作日志  类型 : 查询 , 新增 , 修改 , 删除
        List<SysLogUserOpt> operationLogList = sysLogUserOptService.getAllOperationLogs(queryDate);

        ArrayList<SysLogUserOpt> queryLogList = new ArrayList<>();
        ArrayList<SysLogUserOpt> insertLogList = new ArrayList<>();
        ArrayList<SysLogUserOpt> updateLogList = new ArrayList<>();
        ArrayList<SysLogUserOpt> deleteLogList = new ArrayList<>();
        if (operationLogList.size() > 0) {
            for (SysLogUserOpt sysLogUserOpt : operationLogList) {
                String operation = sysLogUserOpt.getOperation();
                //logger.info("操作类型为 : " + operation);
                String subOpe = operation.substring(operation.length() - 2, operation.length());
                //logger.info("截取后两位的操作类型 : " + subOpe);
                if ("查询".equals(subOpe)) {
                    queryLogList.add(sysLogUserOpt);
                } else if ("新增".equals(subOpe)) {
                    insertLogList.add(sysLogUserOpt);
                } else if ("修改".equals(subOpe)) {
                    updateLogList.add(sysLogUserOpt);
                } else if ("删除".equals(subOpe)) {
                    deleteLogList.add(sysLogUserOpt);
                } else {
                    logger.info("其他操作类型日志 : " + operation);
                }
            }
        }
        logger.info("查询 日志数量为 : " + queryLogList.size());
        logger.info("新增 日志数量为 : " + insertLogList.size());
        logger.info("修改 日志数量为 : " + updateLogList.size());
        logger.info("删除 日志数量为 : " + deleteLogList.size());
        if (sysLogList.size() > 0) {
        //拼接xml数据
            String loginListXml = dom4jUtil.loginXMLHelper(RegID, sysLogList);
            logger.info(loginListXml);
        }
        if (queryLogList.size() > 0) {
            String queryListXml = dom4jUtil.operationXMLHelper(RegID, queryLogList);
            logger.info(queryListXml);
        }
        if (insertLogList.size() > 0) {
            String insertListXml = dom4jUtil.operationXMLHelper(RegID, insertLogList);
            System.out.println(insertListXml);
        }
        if (updateLogList.size() > 0) {
            String updateListXml = dom4jUtil.operationXMLHelper(RegID, updateLogList);
           logger.info(updateListXml);
        }

        if (deleteLogList.size() > 0) {
            String deleteListXml = dom4jUtil.operationXMLHelper(RegID, deleteLogList);
            logger.info(deleteListXml);
        }

    }
}

(2) dom4j拼装xml格式数据 方法

package com.hisign.dzpt.web.schedule;

import com.hisign.dzpt.api.entity.sys.SysLog;
import com.hisign.dzpt.api.entity.sys.SysLogUserOpt;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import java.text.SimpleDateFormat;
import java.util.List;

public class dom4jUtil {
    /**
     * 推送日志
     *
     * @param RegID            申请的RegID唯一标识
     * @param operationLogList 推送的日志信息
     * @return
     */
    public static String operationXMLHelper(String RegID, List<SysLogUserOpt> operationLogList) {
        Document document = DocumentHelper.createDocument();
        document.setXMLEncoding("UTF-8");

        Element rootElement = document.addElement("Aspt");
        Element version = rootElement.addElement("Version");
        version.addText("1.0");

        Element regID = rootElement.addElement("RegID");
        regID.setText(RegID);

        Element logs = rootElement.addElement("Logs");

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (operationLogList.size() > 0) {
            for (SysLogUserOpt sysLogUserOpt : operationLogList) {
                Element log = logs.addElement("Log");

                Element num_id = log.addElement("Num_ID");
                num_id.addText(sysLogUserOpt.getId());

                Element user_id = log.addElement("User_ID");
                user_id.addText(sysLogUserOpt.getUserId());

                Element organization = log.addElement("Organization");
                organization.addText(sysLogUserOpt.getOrganNmae());

                Element organization_id = log.addElement("Organization_ID");
                organization_id.addText(sysLogUserOpt.getOrganCode());

                Element user_name = log.addElement("User_Name");
                user_name.addText(sysLogUserOpt.getUserName());

                Element terminal_id = log.addElement("Terminal_ID");
                terminal_id.addText(sysLogUserOpt.getIp());

                Element operation_time = log.addElement("Operation_Time");
                operation_time.addText(dateFormat.format(sysLogUserOpt.getCreateTime()));

                Element operate_result = log.addElement("Operate_Result");
                operate_result.addText("1");

                Element error_code = log.addElement("Error_Code");
                error_code.addText(" ");  //错误代码为空

                Element operate_name = log.addElement("Operate_Name");
                operate_name.addText(sysLogUserOpt.getOperation());

                Element operate_condition = log.addElement("Operate_Condition");
                operate_condition.addText(sysLogUserOpt.getConditions());

            }

        }
        return document.asXML();
    }

    public static String loginXMLHelper(String RegID, List<SysLog> loginLogList) {
        Document document = DocumentHelper.createDocument();
        document.setXMLEncoding("UTF-8");

        Element rootElement = document.addElement("Aspt");
        Element version = rootElement.addElement("Version");
        version.addText("1.0");

        Element regID = rootElement.addElement("RegID");
        regID.setText(RegID);

        Element logs = rootElement.addElement("Logs");

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (loginLogList.size() > 0) {

            for (SysLog sysLog : loginLogList) {
                Element log = logs.addElement("Log");

                Element num_id = log.addElement("Num_ID");
                num_id.addText(sysLog.getId());  //id

                Element user_id = log.addElement("User_ID");
                user_id.addText(sysLog.getUserId());  //用户id

                Element organization = log.addElement("Organization");
                organization.addText(sysLog.getUnitName());  //机构名称

                Element organization_id = log.addElement("Organization_ID");
                organization_id.addText(sysLog.getLoginUnit());  //机构id

                Element user_name = log.addElement("User_Name");
                user_name.addText(sysLog.getLoginUser());  //用户名

                Element terminal_id = log.addElement("Terminal_ID");
                terminal_id.addText(sysLog.getLoginIp());  //终端标识

                Element operation_time = log.addElement("Operation_Time");
                operation_time.addText(sysLog.getLoginDate());   //创建时间

                Element operate_result = log.addElement("Operate_Result");
                operate_result.addText("1");

                Element error_code = log.addElement("Error_Code");
                error_code.addText(" ");  //错误代码为空

                Element operate_name = log.addElement("Operate_Name");
                operate_name.addText("登录"); //操作名称

                Element operate_condition = log.addElement("Operate_Condition");
                operate_condition.addText("");  //条件用户名,密码

            }
        }

        return document.asXML();
    }
}


以下为使用演示:

依赖

<dependency>
          <groupId>org.dom4j</groupId>
          <artifactId>dom4j</artifactId>
          <version>2.1.1</version>
      </dependency>

示例

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.junit.Test;

public class XMLHelperTest{
   @Test
   public void createDocumentTest(){
     Document document = DocumentHelper.createDocument();
        document.setXMLEncoding("gb2312");
        Element rootElement = document.addElement("config");

        Element firstElement = rootElement.addElement("first");
        //out节点
        Element sonElement = firstElement.addElement("out");
        Element sameElement = null;

        sameElement = sonElement.addElement("Name");
        sameElement.addText("李四");

        sameElement = sonElement.addElement("Age");
        sameElement.addText("26");

        sameElement = sonElement.addElement("Gender");
        sameElement.addText("男");
        //in节点
        Element nextElement = firstElement.addElement("in");
        Element subElement = null;

        subElement = nextElement.addElement("SerialNo");
        subElement.addText("201700001");

        subElement = nextElement.addElement("Certificatetype");
        subElement.addText("0");

        subElement = nextElement.addElement("Certificateno");
        subElement.addText("220182");

        System.out.println(document.asXML());

   }
}


运行结果:

<?xml version="1.0" encoding="gb2312"?>
<config><first><out><Name>李四</Name><Age>26</Age><Gender></Gender></out><in><SerialNo>201700001</SerialNo><Certificatetype>0</Certificatetype><Certificateno>220182</Certificateno></in></first></config>

格式化结果:

<?xml version="1.0" encoding="gb2312"?>
<config>
    <first>
        <out>
            <Name>李四</Name>
            <Age>26</Age>
            <Gender></Gender>
        </out>
        <in>
            <SerialNo>201700001</SerialNo>
            <Certificatetype>0</Certificatetype>
            <Certificateno>220182</Certificateno>
        </in>
    </first>
</config>

2、动态拼接XML

   /**
     * <?xml version="1.0" encoding="GBK"?>
     * <TXT>
     *     <Sign>xxx</Sign>
     *     <Request>
     *         <Version>1.0</Version>
     *         <EditNo>001</EditNo>
     *         <MsgInfo>
     *             <Time>xxx</Time>
     *             <Name>xxx</Name>
     *             <CertNo>xxx</CertNo>
     *             <Mobile>188xxxxxx</Mobile>
     *         </MsgInfo>
     *     </Request>
     * </TXT>
     *
     * @return
     */
    public static Document createXML() {
        Document document = DocumentHelper.createDocument();
        document.setXMLEncoding("GBK");

        Element root = document.addElement("TXT");
        root.addElement("Sign");

        Element request = root.addElement("Request");
        request.addElement("Version");
        request.addElement("EditNo");
        request.addElement("MsgInfo");

        return document;
    }

    @Test
    public void testCreateXML(){
        Map<String,String> param = new LinkedHashMap<String, String>();

        param.put("Time", "20170101000000");
        param.put("Name", "李四");
        param.put("CertNo", "622848");
        param.put("Mobile", "1880431");

        Document document = createXML();

        Element root = document.getRootElement();获取document根节点
        root.element("Sign").setText("签名方式");

        Element request = root.element("Request");
        request.element("Version").setText("1.0");
        request.element("EditNo").setText("001");

        Element msgInfo = request.element("MsgInfo");

        for (Map.Entry<String,String> entry : param.entrySet()) {
           msgInfo.addElement(entry.getKey()).setText(entry.getValue());
        }

//        System.out.println(root.asXML());
//        System.out.println(request.asXML());
        System.out.println(document.asXML());

    }

运行结果:

<?xml version="1.0" encoding="GBK"?>
<TXT><Sign>签名方式</Sign><Request><Version>1.0</Version><EditNo>001</EditNo><MsgInfo><Time>20170101000000</Time><Name>李四</Name><CertNo>622848</CertNo><Mobile>1880431</Mobile></MsgInfo></Request></TXT>

3、拼接xml样例

<?xml version="1.0" encoding="UTF-8"?>
<result code="0000" msg="成功"/>
public static Document createResponseSuccessRoot(String code, String message)
    {
        Document document = DocumentHelper.createDocument();
        Element result = document.addElement("result");
        result.addAttribute("code", code);
        result.addAttribute("msg", message);
        return document;
    }

    @org.junit.Test
    public void testCreate() {
        Document doc = createResponseSuccessRoot("0000","成功");
        System.out.println(doc.asXML());
    }

4、拼接xml样例

<?xml version="1.0" encoding="UTF-8"?>
<result code="0000" msg="成功"><record code="0000" msg="成功"/></result>
public static void addContentByElement(Element element, Map content){
   Element resultElement = element.addElement("record");
   for (Iterator iterator = content.entrySet().iterator(); iterator.hasNext();){
      Entry entry = (Entry)iterator.next();
      resultElement.addAttribute((String) entry.getKey(), String.valueOf(entry.getValue()));
   }
   }

    @Test
    public void addContentByElement() {
        Map map = new HashMap();
        map.put("code", "0000");
        map.put("msg", "成功");
        Document doc = createResponseSuccessRoot("0000", "成功");
        addContentByElement(doc.getRootElement(), map);
        System.out.println(doc.asXML());
    }

5、将map转为xml

public static String createXmlByMap(Map param) {
    Document document = DocumentHelper.createDocument();
    document.setXMLEncoding("GBK");
    Element root = document.addElement("root");
    //1、遍历map
    for(Object key : param.keySet()){
        Element element = root.addElement((String) key);
        element.setText((String)param.get(key));
    }
    //2、遍历map
    Iterator iter = param.entrySet().iterator();
    while (iter.hasNext()) {
        Map.Entry entry = (Map.Entry)iter.next();
        Element element = root.addElement((String) entry.getKey());
        element.setText((String) entry.getValue());
    }
    //3、遍历map
    for (Iterator iters = param.entrySet().iterator(); iters.hasNext();){
         Map.Entry entry = (Map.Entry)iters.next();
         Element element = root.addElement((String) entry.getKey());
         element.setText((String) entry.getValue());
    }
    return document.asXML();
}

6、将xml转成map

public static Map getMapByXml(String xml) throws DocumentException {

    Map returnMap = new HashMap();

    SAXReader reader = new SAXReader();
    Document document = reader.read(new StringReader(xml));
    Element root = document.getRootElement();
    for (Iterator it = root.elementIterator(); it.hasNext();){
         Element element = (Element)it.next();
         returnMap.put(element.getName(), element.getText());
    }

    return returnMap;
}

原文链接:https://blog.csdn.net/yewen1234/article/details/71172987

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值