生成XML串(自用)

生成xml字符串笔记

灵魂来源 :https://blog.csdn.net/p812438109/article/details/81807440

自用比较蠢的写法

注意:这里实体类创建尾缀带_baseFlag字段表示标签的名称,其他String字段为标签属性,如果对象中只有String类型字段,则不会有结束标签 如:,如果其中包含对象或List则标签拥有结束标签 如:

一、工具(就是按照规则给排列一下)


public class XmlUtil {

    /**
     * 作用:
     * 1、标识是否需要根节点结束标签
     * 2、标签名称尾缀  如: item_baseFlag  表示一个item 标签
     */
    public static final String BASE_FLAG = "baseFlag";

    /**
     * 将对象转换成xml串
     * 注意,每个标签需要是对象,该对象中字段尾缀为 baseFlag代表标签名字,其他为标签属性  如: item_baseFlag  表示一个item 标签
     * 需要生成标签,则实体类对象中必须存在String类型 规范字段
     * 如:  private String item_baseFlag;
     *
     * @param param
     * @return
     */
    public static String createXmlByModel(Object param) throws ParserConfigurationException, TransformerException {
        if (null == param) {
            return "";
        }
        //生成xml
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.newDocument();
        document.setXmlStandalone(true);

        //第一次遍历获取根节点标签
        LinkedHashMap<String, Object> paramMap = JSONObject.parseObject(JSONObject.toJSONString(param), LinkedHashMap.class);
        Element itemInfo = null;
        for (String key : paramMap.keySet()) {
            Object value = paramMap.get(key);
            if (null == itemInfo) {
                for (String itemKey : paramMap.keySet()) {
                    String[] itemKeyItemStr = itemKey.split("_");
                    if (null != itemKeyItemStr && itemKeyItemStr.length >= 2 && BASE_FLAG.equals(itemKeyItemStr[itemKeyItemStr.length - 1])) {
                        itemInfo = document.createElement(itemKeyItemStr[0]);
                    }
                }
            }
            if (value instanceof List) {
                //循环
                for (Object key_valueList : (List) value) {
                    setRootNode(key_valueList, document, itemInfo);
                }
            } else {
                setRootNode(value, document, itemInfo);
            }
        }
        // 添加根节点
        document.appendChild(itemInfo);

        TransformerFactory transFactory = TransformerFactory.newInstance();
        Transformer transformer = transFactory.newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        DOMSource domSource = new DOMSource(document);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        transformer.transform(domSource, new StreamResult(bos));
        return bos.toString();
    }


    private static void setRootNode(Object param, Document document, Element element) {
        LinkedHashMap<String, Object> paramMap = JSONObject.parseObject(JSONObject.toJSONString(param), LinkedHashMap.class);
        if (null == paramMap || paramMap.size() <= 0) {
            return;
        }
        /**
         * 循环数据
         */
        Element itemInfo = null;
        for (String key : paramMap.keySet()) {
            Object value = paramMap.get(key);
            if (null == itemInfo) {
                for (String itemKey : paramMap.keySet()) {
                    String[] itemKeyItemStr = itemKey.split("_");
                    if (null != itemKeyItemStr && itemKeyItemStr.length >= 2 && BASE_FLAG.equals(itemKeyItemStr[itemKeyItemStr.length - 1])) {
                        itemInfo = document.createElement(itemKeyItemStr[0]);
                    }
                }
            }
            if (value instanceof String) {
                if (null != value && !"".equals(value)) {
                    itemInfo.setAttribute(key, (String) value);
                }
            } else if (value instanceof List) {
                //循环
                for (Object key_valueList : (List) value) {
                    setRootNode(key_valueList, document, itemInfo);
                }
            } else {
                setRootNode(value, document, itemInfo);
            }
        }
        //将当前标签放入参数 element 标签下
        element.appendChild(itemInfo);
    }
}

二、实体类


@Data
public class XmlModel {

    private String license_baseFlag;

    private Basic licenseModel;

    private CatalogModel catalogModel;

    /**
     * 根节点对象
     */
    @Data
    public class Basic{

        private String surface_baseFlag;

        private List<SurfaceModel> surfaceList;

    }

    @Data
    public class CatalogModel{

        private String catalog_baseFlag;

        private String catalogId;

        private String catalogName;

        private String templateId;

        private String templateName;

        private String version;
    }
    @Data
    public class SurfaceModel{

        private String item_baseFlag;

        private String alias;

        private String code;

        private String name;

        private String require;

        private String value;
    }
}

三、调用测试

  XmlModel xmlModel = new XmlModel();
        xmlModel.setLicense_baseFlag("");
        XmlModel.Basic basic = new XmlModel().new Basic();
        basic.setSurface_baseFlag("");
//        basic.setBaseFlag(true);

        XmlModel.CatalogModel catalogModel = new XmlModel().new CatalogModel();
        catalogModel.setCatalog_baseFlag("");
        catalogModel.setCatalogId("dsa45dsad");
        catalogModel.setCatalogName("danamename");
        catalogModel.setTemplateName("Dasdwr");
        catalogModel.setTemplateId("das_id");
        xmlModel.setCatalogModel(catalogModel);

        ArrayList<XmlModel.SurfaceModel> surfaceModelArrayList = new ArrayList<>();
        XmlModel.SurfaceModel surfaceModel = new XmlModel().new SurfaceModel();
        surfaceModel.setItem_baseFlag("");
        surfaceModel.setAlias("dashjhg");
        surfaceModel.setCode("dakjhng");
        surfaceModelArrayList.add(surfaceModel);
        XmlModel.SurfaceModel surfaceModel2 = new XmlModel().new SurfaceModel();
        surfaceModel2.setItem_baseFlag("");
        surfaceModel2.setAlias("dasheqwewqe23213jhg");
        surfaceModel2.setCode("rferfsrdakjhrng");
        surfaceModelArrayList.add(surfaceModel2);
        basic.setSurfaceList(surfaceModelArrayList);
        xmlModel.setLicenseModel(basic);
        String xmlByModel = XmlUtil.createXmlByModel(xmlModel);
        System.out.println(xmlByModel);

结果


<?xml version="1.0" encoding="UTF-8"?>
<license>
	<catalog catalogId="dsa45dsad" catalogName="danamename" templateId="das_id" templateName="Dasdwr"/>
	<surface>
		<item alias="dashjhg" code="dakjhng"/>
		<item alias="dasheqwewqe23213jhg" code="rferfsrdakjhrng"/>
	</surface>
</license>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值