【Groovy】自定义 Xml 生成器 BuilderSupport ( setParent 方法中设置父节点与子节点关系 )

举报
韩曙亮 发表于 2022/02/11 01:00:44 2022/02/11
【摘要】 文章目录 一、setParent 方法中设置父节点与子节点关系二、完整代码示例1、MyBuilderSupport 生成器代码2、使用 MyBuilderSupport 生成器创建 Xml 代码 ...





一、setParent 方法中设置父节点与子节点关系



在自定义的 Xml 生成器 MyBuilderSupport 中的 setParent 方法是设置节点之间父子关系的方法 , 在调用了 Object createNode(Object name, Map attributes, Object value) 方法返回非空值后 , 会自动回调该方法 ;
( 注意 : 一定要返回非空值 )

public class MyBuilderSupport extends BuilderSupport {
    /**
     * 设置节点之间的关系
     * @param parent Xml 中的父节点
     * @param child Xml 中的父节点下的子节点
     */
    @Override
    protected void setParent(Object parent, Object child) {
        println "setParent parent : ${parent} , child : ${child}"
    }

    @Override
    protected Object createNode(Object name, Map attributes, Object value) {
        println "$name, $attributes, $value"
        return name;
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

调用

// 创建自定义 Xml 构造器
def myBuilderSupport = new MyBuilderSupport()

// 构建 student 根节点
myBuilderSupport.student {
    // 构建 student 根节点下的 name 节点
    // 该节点有 code: "UTF-8" 属性
    // 节点元素为 "Tom" 字符串
    name("Tom", code: "UTF-8")

    age(18)
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

代码 , 创建 Xml 数据 , 输出结果如下 :

student, null, null
name, [code:UTF-8], Tom
setParent parent : student , child : name
age, null, 18
setParent parent : student , child : age

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

创建 <student> 根节点时 , 在 createNode 方法中 , 输出 student, null, null 内容 , 说明该节点只有节点名称 , 没有节点属性与节点值 ;


创建 <name> 节点时 , 输出

name, [code:UTF-8], Tom
setParent parent : student , child : name

  
 
  • 1
  • 2

该节点名称 name , 属性 [code:UTF-8] , 节点值 “Tom” , 创建完毕后 , 在 MyBuilderSupport 生成器的 setParent 方法中 , 输出 setParent parent : student , child : name , student 节点是父节点 , name 节点是子节点 ;


创建 <age> 节点时 , 输出

age, null, 18
setParent parent : student , child : age

  
 
  • 1
  • 2

该节点名称是 age , 属性 为空 , 值为 18 ;

创建完毕后 , 在 MyBuilderSupport 生成器的 setParent 方法中 , 输出 setParent parent : student , child : age , student 节点是父节点 , age 节点是子节点 ;





二、完整代码示例




1、MyBuilderSupport 生成器代码


import groovy.util.BuilderSupport;

import java.util.Map;

public class MyBuilderSupport extends BuilderSupport {
    /**
     * 设置节点之间的关系
     * @param parent Xml 中的父节点
     * @param child Xml 中的父节点下的子节点
     */
    @Override
    protected void setParent(Object parent, Object child) {
        println "setParent parent : ${parent} , child : ${child}"
    }

    @Override
    protected Object createNode(Object name) {
        /*
            所有的 createNode 方法都回调到 3 个参数的 createNode 方法
         */
        return createNode(name, null, null);
    }

    @Override
    protected Object createNode(Object name, Object value) {
        /*
            所有的 createNode 方法都回调到 3 个参数的 createNode 方法
         */
        return createNode(name, null, value);
    }

    @Override
    protected Object createNode(Object name, Map attributes) {
        /*
            所有的 createNode 方法都回调到 3 个参数的 createNode 方法
         */
        return createNode(name, attributes, null);
    }

    @Override
    protected Object createNode(Object name, Map attributes, Object value) {
        println "$name, $attributes, $value"
        return name;
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

2、使用 MyBuilderSupport 生成器创建 Xml 代码


// 创建自定义 Xml 构造器
def myBuilderSupport = new MyBuilderSupport()

// 构建 student 根节点
myBuilderSupport.student {
    // 构建 student 根节点下的 name 节点
    // 该节点有 code: "UTF-8" 属性
    // 节点元素为 "Tom" 字符串
    name("Tom", code: "UTF-8")

    age(18)
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

执行结果 :

student, null, null
name, [code:UTF-8], Tom
setParent parent : student , child : name
age, null, 18
setParent parent : student , child : age

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/122854372

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。