【工具类】xml生成工具类

前言:最近一直在玩工单,前人写的处理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无法支持的字符,可以去掉。

猜你喜欢

转载自blog.csdn.net/qq_26834611/article/details/108856515