【Groovy】自定义 Xml 生成器 BuilderSupport ( 继承 BuilderSupport 抽象类 | 在 createNode 方法中获取节点名称、节点属性、节点值信息 )
文章目录
- 一、继承 BuilderSupport 抽象类
- 二、在 createNode 方法中获取节点名称、节点属性、节点值信息
- 三、完整代码示例
- 1、MyBuilderSupport 生成器代码
- 2、使用 MyBuilderSupport 生成器创建 Xml 代码
一、继承 BuilderSupport 抽象类
参考 Xml 生成器 MarkupBuilder , 自定义开发一个 Xml 生成器 ;
public class MarkupBuilder extends BuilderSupport {}
创建 MyBuilderSupport 类 , 继承 BuilderSupport 抽象类 , 并实现如下抽象方法
protected abstract void setParent(Object parent, Object child);protected abstract Object createNode(Object name);protected abstract Object createNode(Object name, Object value);protected abstract Object createNode(Object name, Map attributes);protected abstract Object createNode(Object name, Map attributes, Object value);
令所有的 createNode 方法都回调到 3 个参数的 createNode 方法 ;
import groovy.util.BuilderSupport;import java.util.Map;public class MyBuilderSupport extends BuilderSupport {@Overrideprotected void setParent(Object parent, Object child) {}@Overrideprotected Object createNode(Object name) {/*所有的 createNode 方法都回调到 3 个参数的 createNode 方法*/return createNode(name, null, null);}@Overrideprotected Object createNode(Object name, Object value) {/*所有的 createNode 方法都回调到 3 个参数的 createNode 方法*/return createNode(name, null, value);}@Overrideprotected Object createNode(Object name, Map attributes) {/*所有的 createNode 方法都回调到 3 个参数的 createNode 方法*/return createNode(name, attributes, null);}@Overrideprotected Object createNode(Object name, Map attributes, Object value) {return null;}
}
二、在 createNode 方法中获取节点名称、节点属性、节点值信息
在自定义的 MyBuilderSupport 类中 , 所有的创建节点的 createNode 方法都回调到 3 个参数的 createNode 方法
@Overrideprotected Object createNode(Object name, Map attributes, Object value) {return null;}
因此 , 在该方法中 , 可以获取到节点的所有信息 , 包括 节点名称、节点属性、节点值信息 ;
在该方法中打印相关节点信息 :
@Overrideprotected Object createNode(Object name, Map attributes, Object value) {println "$name, $attributes, $value"return null;}
在 Groovy 脚本中 , 创建自定义 Xml 生成器 MyBuilderSupport 对象 , 并使用闭包描述要创建的 Xml 文件 ;
// 创建自定义 Xml 构造器
def myBuilderSupport = new MyBuilderSupport()// 构建 student 根节点
myBuilderSupport.student {// 构建 student 根节点下的 name 节点// 该节点有 code: "UTF-8" 属性// 节点元素为 "Tom" 字符串name("Tom", code: "UTF-8")
}
打印结果如下 :
student, null, null
name, [code:UTF-8], Tom
使用 myBuilderSupport.student
构建 student 根节点时 , 该节点没有值和属性 , 因此打印结果为 student, null, null
, 只打印了 name 名称 ;
使用 name("Tom", code: "UTF-8")
构建 name 节点 , 该节点的名称是 name
, 属性值是 code:UTF-8
, 节点的值为 “Tom” , 打印结果为 name, [code:UTF-8], Tom
;
三、完整代码示例
1、MyBuilderSupport 生成器代码
import groovy.util.BuilderSupport;import java.util.Map;public class MyBuilderSupport extends BuilderSupport {@Overrideprotected void setParent(Object parent, Object child) {}@Overrideprotected Object createNode(Object name) {/*所有的 createNode 方法都回调到 3 个参数的 createNode 方法*/return createNode(name, null, null);}@Overrideprotected Object createNode(Object name, Object value) {/*所有的 createNode 方法都回调到 3 个参数的 createNode 方法*/return createNode(name, null, value);}@Overrideprotected Object createNode(Object name, Map attributes) {/*所有的 createNode 方法都回调到 3 个参数的 createNode 方法*/return createNode(name, attributes, null);}@Overrideprotected Object createNode(Object name, Map attributes, Object value) {println "$name, $attributes, $value"return null;}
}
2、使用 MyBuilderSupport 生成器创建 Xml 代码
// 创建自定义 Xml 构造器
def myBuilderSupport = new MyBuilderSupport()// 构建 student 根节点
myBuilderSupport.student {// 构建 student 根节点下的 name 节点// 该节点有 code: "UTF-8" 属性// 节点元素为 "Tom" 字符串name("Tom", code: "UTF-8")
}
执行结果 :
student, null, null
name, [code:UTF-8], Tom
【Groovy】自定义 Xml 生成器 BuilderSupport ( 继承 BuilderSupport 抽象类 | 在 createNode 方法中获取节点名称、节点属性、节点值信息 )相关推荐
- 【Groovy】自定义 Xml 生成器 BuilderSupport ( nodeCompleted 方法获取节点闭合信息 )
文章目录 一.nodeCompleted 方法获取节点闭合信息 二.完整代码示例 1.MyBuilderSupport 生成器代码 2.使用 MyBuilderSupport 生成器创建 Xml 代码 ...
- 【Groovy】自定义 Xml 生成器 BuilderSupport ( 创建 XmlNode 节点 | 管理 XmlNode 节点并将根节点转为 Xml 信息 | 完整代码示例 )
文章目录 一.创建 XmlNode 节点 二.管理 XmlNode 节点并将根节点转为 Xml 信息 三.完整代码示例 1.自定义 Xml 生成器 MyBuilderSupport 2.Xml 节点封 ...
- 【Groovy】自定义 Xml 生成器 BuilderSupport ( setParent 方法中设置父节点与子节点关系 )
文章目录 一.setParent 方法中设置父节点与子节点关系 二.完整代码示例 1.MyBuilderSupport 生成器代码 2.使用 MyBuilderSupport 生成器创建 Xml 代码 ...
- 【Groovy】自定义 Xml 生成器 BuilderSupport ( 构造 Xml 节点类 | 封装节点名称、节点值、节点属性、子节点 | 将封装的节点数据转为 Xml 字符串 )
文章目录 一.构造 Xml 节点类 1.封装节点名称.节点值.节点属性.子节点 2.将封装的节点数据转为 Xml 字符串 二.Xml 节点类完整代码 一.构造 Xml 节点类 生成 Xml 数据前 , ...
- java拦截器继承类_struts2的拦截器(5):继承MethodFilterInterceptor抽象类实现拦截方法的拦截器 | 学步园...
在默认情况下,如果我们为某个Action定义了拦截器,则这个拦截器会拦截该Action内的所有方法.但在某些情况下,我们不想拦截所有的方法,我们只需要拦截某些特定方法,此时就需要使用struts2拦截 ...
- 10.java基础----继承、抽象类- 编程
命名要求:1. 类名,接口名,枚举名,注解名使用大驼峰2. 变量名,方法名,包名均使用小驼峰3. 常量名全大写,多个单词下划线分割4. 名字要见名知意,如果不知道对应的英文,可以使用拼音代替.不可使用 ...
- 面向对象封装继承多态五大基本原则魔法方法反射
目录 面向对象 三大基本特征 五大基本原则 魔法方法 反射 面向对象 什么是面向对象 使用模板的思想,将世界万事万物使用对象来表示一个类型 面向对象和面向过程的区别: 面向对象的不就是使用程序处理事情 ...
- XML文件解析(在Windows环境MFC程序中,使用自带的MSXML6.dll解析)
主要总结一下MSXML DOM接口的应用.DOM(Document Object Model) 是微软提供的处理XML文档的一个API标准库,我们可以将其理解为一组抽象了XML文档结构的接口. MSX ...
- 【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 标签闭包下创建子标签 | 使用 MarkupBuilderHelper 添加 xml 注释 )
文章目录 一.标签闭包下创建子标签 二.使用 MarkupBuilderHelper 添加 xml 注释 三.完整代码示例 一.标签闭包下创建子标签 在上一篇博客 [Groovy]xml 序列化 ( ...
最新文章
- PAT-乙级-1064 朋友数
- 2.7 迁移学习-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
- 就读计算机科学与技术的原因,清华大学转专业数据!23个专业无人响应!深层次原因究竟是什么?...
- ThreadLocal以及增强
- 一个微服务架构的消费端
- 远程WEB控制MP3播放器设计(基于mini2440)
- Flat Tech html5 前端响应式模板
- JAVA 虚拟机类加载机制和字节码执行引擎
- DPDK官方中文文档
- qt开发用的人多吗_新房认筹猫腻多!开发商只是为达到这个目的才认筹,你入坑了吗?...
- spring MVC三种统一异常处理的方法
- Ubuntu 18.04 安装vsftpd
- 获取电信天邑TEWA-700E光猫超级密码相近系列通用方法
- matlab 使用 utf-8 编码
- python 证书-在python使用SSL(HTTPS)
- SDWAN组网典型应用
- 解决卸载CleanMyMac后通知中心仍有通知的问题
- SAP物料主数据采购类型对成本核算的影响
- 最详解泊松分布Poisson distribution
- Linux文件名排序
热门文章
- [爬虫学习笔记]C# 使用 ScrapySharp 并行下载天涯图片
- linux运维实战练习
- [20150205]分析函数ntile.txt
- RHEL6基础四十二之RHEL文件共享①NFS
- legend3---laravel中获取控制器名称和方法名称
- git 错误 RPC
- 获取系统昨日最高峰时的AWR报告,get_hight_load_awr
- YTU 2917: Shape系列-3
- Delphi在创建和使用DLL的时候如果使用到string,请引入ShareMem单元
- 轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能 demo