前言:最近一直在玩工单,前人写的处理xml工单的方式太水了,所以这里自己写了一个工具类,并且分享一下:
package com.bytue.ma_vod.modules.macenter.util;
import com.bytue.ma_vod.modules.macenter.vo.ElementBean;
import lombok.extern.slf4j.Slf4j;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.dom.DOMElement;
import org.dom4j.io.XMLWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author martin
* @version 1.0
* @name: XmlTreeUtil
* @date: 2020/9/28 17:30
* @description 依据c2规范,按照需求构造Xml树节点
* @comepony 北京百途
**/
@Slf4j
public class XmlTreeUtil {
/** 构建Oject | Mapping节点
* @param nodeName 节点名称,如Object | Mapping
* @param elementBean AttributeMap 属性Mapping propertyMap 子节点map
* @return
*/
public static Element generatorObject(String nodeName, ElementBean elementBean){
Element element = new DOMElement(nodeName);
// 参数处理
Map<String, Object> attributeMap = elementBean.getAttributeMap();
attributeMap.forEach((k,v) ->{
//增强型处理。
if(v.equals("]]>") || v.equals("<")||v.equals(">")||v.equals("&")||v.equals("'")||v.equals("\"")){
element.addAttribute(k,"<![CDATA["+v.toString()+"]]>");
}
else{
element.addAttribute(k,v.toString());
}
});
// 属性处理
Map<String, Object> propertyMap = elementBean.getPropertyMap();
propertyMap.forEach((k,v)->{
Element child = element.addElement("Property");
child.addAttribute("Name",k);
// 增强型处理。
if(v.equals("]]>") || v.equals("<")||v.equals(">")||v.equals("&")||v.equals("'")||v.equals("\"")){
child.addCDATA(v.toString());
}else{
child.setText(v.toString());
}
});
return element;
}
// 构建Mapping节点
public static void main(String[] args) throws IOException {
Map attr = new HashMap<>();
attr.put("Code","1111");
attr.put("Id","1111");
attr.put("ElementType","Program");
attr.put("Action","1111");
attr.put("Name","重启&之季极海听雷");
Map property = new HashMap<>();
property.put("ContentProvider","爱奇艺");
property.put("Tags","冒&<险,热血");
property.put("OriAirDate","2020");
ElementBean elementBean = new ElementBean();
elementBean.setAttributeMap(attr);
elementBean.setPropertyMap(property);
Element element = generatorObject("Object", elementBean);
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("E://test//test.xml"));
xmlWriter.write(element);
}
}
要注意的问题有以下三个:
0.用到的是dom4j。
1.JDK要大于1.8 不然循环需要改写成for。
2.用到了lombok的@Slf4j的日志标签,可以去掉。
3.关于处理xml无法支持的字符,可以去掉。