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