【Groovy】自定义 Xml 生成器 BuilderSupport ( nodeCompleted 方法获取节点闭合信息 )
文章目錄
- 一、nodeCompleted 方法獲取節(jié)點閉合信息
- 二、完整代碼示例
- 1、MyBuilderSupport 生成器代碼
- 2、使用 MyBuilderSupport 生成器創(chuàng)建 Xml 代碼
一、nodeCompleted 方法獲取節(jié)點閉合信息
在之前的博客中 , 在 BuilderSupport#createNode 方法中創(chuàng)建了 Xml 節(jié)點 , 在 BuilderSupport#setParent 方法中設(shè)置了 Xml 節(jié)點之間的父子關(guān)系 ;
下面還需要獲取節(jié)點的閉合信息 , 節(jié)點結(jié)束時 , 需要獲取到該信息 , 重寫 BuilderSupport#nodeCompleted 方法 , 該方法不是抽象的方法 , 需要手動添加 , 節(jié)點結(jié)束后 , 會自動回調(diào)該方法 ;
/*** 閉合節(jié)點時, 回調(diào)該方法* @param parent* @param node*/@Overrideprotected void nodeCompleted(Object parent, Object node) {super.nodeCompleted(parent, node)println "nodeCompleted 完成了父節(jié)點為 parent : $parent 的節(jié)點 node : $node 的閉合操作"}自定義的 Xml 生成器核心代碼如下 :
- 首先 , 在 createNode 方法中創(chuàng)建 Node 節(jié)點 ;
- 然后 , 在 setParent 方法中設(shè)置節(jié)點之間的父子關(guān)系 ;
- 最后 , 在 nodeCompleted 方法中獲取節(jié)點的閉合操作 ;
執(zhí)行
// 創(chuàng)建自定義 Xml 構(gòu)造器 def myBuilderSupport = new MyBuilderSupport()// 構(gòu)建 student 根節(jié)點 myBuilderSupport.student {// 構(gòu)建 student 根節(jié)點下的 name 節(jié)點// 該節(jié)點有 code: "UTF-8" 屬性// 節(jié)點元素為 "Tom" 字符串name("Tom", code: "UTF-8")age(18) }代碼后的打印結(jié)果如下 :
創(chuàng)建節(jié)點 名稱 : student, 屬性 : null, 值 : null 創(chuàng)建節(jié)點 名稱 : name, 屬性 : [code:UTF-8], 值 : Tom setParent 設(shè)置子節(jié)點 name 的父節(jié)點是 student nodeCompleted 完成了父節(jié)點為 parent : student 的節(jié)點 node : name 的閉合操作 創(chuàng)建節(jié)點 名稱 : age, 屬性 : null, 值 : 18 setParent 設(shè)置子節(jié)點 age 的父節(jié)點是 student nodeCompleted 完成了父節(jié)點為 parent : student 的節(jié)點 node : age 的閉合操作 nodeCompleted 完成了父節(jié)點為 parent : null 的節(jié)點 node : student 的閉合操作其中我們只關(guān)注 nodeCompleted 方法中打印出的節(jié)點閉合信息 ;
在設(shè)置了 name 為 student 節(jié)點的子節(jié)點之后 , name 節(jié)點就閉合了 , 打印出
nodeCompleted 完成了父節(jié)點為 parent : student 的節(jié)點 node : name 的閉合操作內(nèi)容 , 然后在將 age 節(jié)點 設(shè)置為 student 節(jié)點的子節(jié)點之后 , 該 age 節(jié)點也閉合了 , 打印出
nodeCompleted 完成了父節(jié)點為 parent : student 的節(jié)點 node : age 的閉合操作name 和 age 節(jié)點都閉合后 , 根節(jié)點 student 節(jié)點也隨之閉合 , 整個 Xml 文件所有的節(jié)點都閉合了 ;
本博客的參考 Xml 文件數(shù)據(jù) :
<student><name code="utf-8">Tom</name><age>18</age> </student>二、完整代碼示例
1、MyBuilderSupport 生成器代碼
import groovy.util.BuilderSupport;import java.util.Map;public class MyBuilderSupport extends BuilderSupport {/*** 設(shè)置節(jié)點之間的關(guān)系* @param parent Xml 中的父節(jié)點* @param child Xml 中的父節(jié)點下的子節(jié)點*/@Overrideprotected void setParent(Object parent, Object child) {println "setParent 設(shè)置子節(jié)點 ${child} 的父節(jié)點是 ${parent}"}@Overrideprotected Object createNode(Object name) {/*所有的 createNode 方法都回調(diào)到 3 個參數(shù)的 createNode 方法*/return createNode(name, null, null);}@Overrideprotected Object createNode(Object name, Object value) {/*所有的 createNode 方法都回調(diào)到 3 個參數(shù)的 createNode 方法*/return createNode(name, null, value);}@Overrideprotected Object createNode(Object name, Map attributes) {/*所有的 createNode 方法都回調(diào)到 3 個參數(shù)的 createNode 方法*/return createNode(name, attributes, null);}@Overrideprotected Object createNode(Object name, Map attributes, Object value) {println "創(chuàng)建節(jié)點 名稱 : $name, 屬性 : $attributes, 值 : $value"return name;}/*** 閉合節(jié)點時, 回調(diào)該方法* @param parent* @param node*/@Overrideprotected void nodeCompleted(Object parent, Object node) {super.nodeCompleted(parent, node)println "nodeCompleted 完成了父節(jié)點為 parent : $parent 的節(jié)點 node : $node 的閉合操作"} }
2、使用 MyBuilderSupport 生成器創(chuàng)建 Xml 代碼
// 創(chuàng)建自定義 Xml 構(gòu)造器 def myBuilderSupport = new MyBuilderSupport()// 構(gòu)建 student 根節(jié)點 myBuilderSupport.student {// 構(gòu)建 student 根節(jié)點下的 name 節(jié)點// 該節(jié)點有 code: "UTF-8" 屬性// 節(jié)點元素為 "Tom" 字符串name("Tom", code: "UTF-8")age(18) }
執(zhí)行結(jié)果 :
創(chuàng)建節(jié)點 名稱 : student, 屬性 : null, 值 : null 創(chuàng)建節(jié)點 名稱 : name, 屬性 : [code:UTF-8], 值 : Tom setParent 設(shè)置子節(jié)點 name 的父節(jié)點是 student nodeCompleted 完成了父節(jié)點為 parent : student 的節(jié)點 node : name 的閉合操作 創(chuàng)建節(jié)點 名稱 : age, 屬性 : null, 值 : 18 setParent 設(shè)置子節(jié)點 age 的父節(jié)點是 student nodeCompleted 完成了父節(jié)點為 parent : student 的節(jié)點 node : age 的閉合操作 nodeCompleted 完成了父節(jié)點為 parent : null 的節(jié)點 node : student 的閉合操作總結(jié)
以上是生活随笔為你收集整理的【Groovy】自定义 Xml 生成器 BuilderSupport ( nodeCompleted 方法获取节点闭合信息 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】自定义 Xml 生成器
- 下一篇: 【Groovy】自定义 Xml 生成器