依赖

<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.13.1</version>
</dependency>

树形的model类

public class SchemaElementModel {private SchemaElementModel parentEm;//上级元素标签名字private String tagName;//当前元素标签名字private String text;//当前节点的属性 例如  id="p-1627207" name="颜色分类" type="multiCheck"private Map<String, String> tagAttrMap = new LinkedHashMap<>();private List<SchemaElementModel> childEms;//子元素标签名字private final String pidStart = "p-";public SchemaElementModel() {}public SchemaElementModel(String tagName, Field field) {this.tagName = tagName;this.tagAttrMap.put("id", field.getId());this.tagAttrMap.put("name", field.getName());this.tagAttrMap.put("type", field.getType().value());}public SchemaElementModel(String tagName) {this.tagName = tagName;}public List<SchemaElementModel> getChildEms() {return childEms;}public void setChildEms(List<SchemaElementModel> childEms) {this.childEms = childEms;}public String getTagName() {return tagName;}public void setTagName(String tagName) {this.tagName = tagName;}public String getText() {return text;}public void setText(String text) {this.text = text;}public Map<String, String> getTagAttrMap() {return tagAttrMap;}public void setTagAttrMap(Map<String, String> tagAttrMap) {this.tagAttrMap = tagAttrMap;}public void putTagAttrMap(String attrName, String attrVal) {this.tagAttrMap.put(attrName, attrVal);}public SchemaElementModel getParentEm() {return parentEm;}public void setParentEm(SchemaElementModel parentEm) {this.parentEm = parentEm;}public List<SchemaElementModel> selectChildEms(String tagName) {if (this.childEms == null || tagName == null) return null;return this.childEms.stream().filter(x -> tagName.equals(x.getTagName())).collect(Collectors.toList());}public SchemaElementModel addChildEm(SchemaElementModel model) {this.childEms = this.childEms == null ? new ArrayList<>() : this.childEms;this.childEms.add(model);return this;}public SchemaElementModel addChildEm(String childTagName) {this.childEms = this.childEms == null ? new ArrayList<>() : this.childEms;this.childEms.add(new SchemaElementModel(childTagName));return this;}

执行代码

public class ItemSchemaUtil {/*** 传入一个元素和自定义的对象model进来* 根据model的参数创建指定标签和标签的属性** @param e  参数只要是实现了Element* @param em 自定义的model类*/public static <E extends Element> void appendElement(E e, SchemaElementModel em) {if (e == null) return;Element element = e.appendElement(em.getTagName());//创建标签if (!CollectionUtils.isEmpty(em.getTagAttrMap())) {//设置标签属性em.getTagAttrMap().entrySet().forEach(x -> element.attr(x.getKey(), x.getValue()));//设置文本值例如<value>真不错</value>if (!StringUtils.isEmpty(em.getText())) element.text(em.getText());}if (em.getParentEm() != null) {//父标签Element pElement = new Element(em.getTagName());em.getTagAttrMap().entrySet().forEach(x -> pElement.attr(x.getKey(), x.getValue()));if (!StringUtils.isEmpty(em.getText())) pElement.text(em.getText());e.appendTo(pElement);}if (CollectionUtils.isEmpty(em.getChildEms())) return;//子标签for (SchemaElementModel elementModel : em.getChildEms()) {setElement(element, elementModel);}}/*** 子节点递归调用** @param element* @param em*/private static void setElement(Element element, SchemaElementModel em) {Element appendElement = element.appendElement(em.getTagName());if (!CollectionUtils.isEmpty(em.getTagAttrMap())) {em.getTagAttrMap().entrySet().forEach(x -> appendElement.attr(x.getKey(), x.getValue()));if (!StringUtils.isEmpty(em.getText())) appendElement.text(em.getText());}if (CollectionUtils.isEmpty(em.getChildEms())) return;for (SchemaElementModel elementModel : em.getChildEms()) {setElement(appendElement, elementModel);}}
}

SchemaElementModel的示例数据

生成的XML示例

基于jsoup的Element实现将树形结构转换成XML格式相关推荐

  1. javascript --- 将DOM结构转换成虚拟DOM 虚拟DOM转换成真实的DOM结构

    虚拟DOM的实现 使用虚拟DOM的原因: 减少回流与重绘 将DOM结构转换成对象保存到内存中 <img /> => { tag: 'img'} 文本节点 => { tag: u ...

  2. GNN-图卷积模型-2016:PATCHY-SAN【图结构序列化:将图结构转换成了序列结构,然后直接利用卷积神经网络在转化成的序列结构上做卷积】

    我们之前曾提到卷积神经网络不能应用在图结构上是因为图是非欧式空间,所以大部分算法都沿着找到适用于图的卷积核这个思路来走. 而 PATCHY-SAN 算法 <Learning Convolutio ...

  3. golang中结构体转成xml格式

    本文主要介绍结构体与xml格式的字符串进行相互转换,Go自带xml包,所以进行格式转换非常的方便. 一.结构体转成xml格式 1.转成不需要排版的xml格式字符串,可直接使用Marshal()方法 f ...

  4. oracle转换表结构,SQLServer表结构转换成Oracle表结构

    /******************** * function:sqlserver 表结构转换成Oralce 表结构,不支持索引以及自动增长 **********************/ --取消 ...

  5. 基于MuPDF库实现PDF文件转换成PNG格式图片

    背景 之所以会接触MuPDF是因为,有位群友在Q群里提问,如何将PDF保存为.PNG图片格式.我一看到这个问题,就蒙了,因为我没有接触过类似的项目或程序.但是,作为一群之主的我,还是要给初学者一个答复 ...

  6. 【通俗易懂】vue-elementul实现树形数据表格,后台返回的扁平化数组进行树形结构转换处理

    效果图 需求是做一个这种的多层级表格,树形数据表格. 大家可能遇到的问题 一种是不知道如何做这种多层级的表格 一种是后台给自己返回的数据不是树形的,也就是没有子父级.全是一条条的扁平化数组.类似这样 ...

  7. 如何将mysql表结构导出成Excel格式的(并带备注)

    方法一: 1.使用一个MySQL管理工具:SQLyog,点击菜单栏"数据库"下拉的最后一项: 导出的格式如下: 2.要想转成Excel格式的只需手动将该表复制到Excel中去. 方 ...

  8. mysql表结构导出成Excel格式带备注

    第一步 SQL查询表结构(备注信息) SELECTCOLUMN_NAME 列名,COLUMN_TYPE 数据类型,DATA_TYPE 字段类型,CHARACTER_MAXIMUM_LENGTH 长度, ...

  9. 基于C++的 将BMP位图转换成JPG格式图像

    VC++ 将BMP位图转换成JPG格式图像,源码中同时包括了自定义控件的源码. 项目源代码: 操作步骤:运行程序前,首先将源程序附带的"JPGXControl1.ocx"文件拷贝到 ...

最新文章

  1. linux tcmalloc,内存管理TCMalloc 安装和使用
  2. amp 显示成转义字符 in html,如何在HTML标签中转换转义字符?(How to convert escape characters in HTML tags?)...
  3. 【Leetcode | 9】217. 存在重复元素
  4. java静态变量,静态代码块,普通代码块,构造函数加载顺序
  5. java接口文档生成工具_接口文档生成
  6. jinja2 中的 Template 批量替换json字符串中的内容
  7. Linux在文件第一列添加字段,linux – 如何将file1的每一列追加到file2的特定字段并创建一个新的输出文件?...
  8. 【机器学习-西瓜书】三、线性回归;对数线性回归
  9. 描述个人品质常用英语单词一览
  10. 分治算法 循环比赛日程表
  11. 华为荣耀畅玩7安卓系统升级为鸿蒙系统,华为EMUI系统迎来绝唱!内核升级为鸿蒙,荣耀被彻底放弃?...
  12. 5种经典程序化日内交易策略
  13. 计算机科学技术应用任务书,计算机科学与技术专——专业实习任务书.doc
  14. python中布尔类型的值包括_Python 布尔值(Booleans)
  15. git找回删除的stash
  16. Git 提示Your branch is up-to-date with 'origin/master'
  17. MMCV——build_norm_layer
  18. 原创视频消重百度云 视频md5修改器ios
  19. 鹅厂7年终有离开之日,记离职鹅厂最后30天的真实心路历程
  20. 淘宝店铺转让定金可以退吗

热门文章

  1. 浅谈物联网时代设备加密的重要性
  2. SpringBoot集成邮箱功能并使用Knife4j测试
  3. 斑马ZM40条码打印机仅7K3
  4. CSM(Certified Scrum Master)敏捷大师培训总结
  5. 安卓app和苹果app共用一个二维码
  6. 如何下载东直门街道卫星地图高清版大图
  7. 小孩孩子应用题计算机错误,为什么一二年级的孩子数学应用题总出错?
  8. 资讯--2019年7月
  9. Leetcode sixth day
  10. 电源管理基本观念之二