【Groovy】自定义 Xml 生成器 BuilderSupport ( nodeCompleted 方法获取节点闭合信息 )
生活随笔
收集整理的這篇文章主要介紹了
【Groovy】自定义 Xml 生成器 BuilderSupport ( nodeCompleted 方法获取节点闭合信息 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、nodeCompleted 方法獲取節點閉合信息
- 二、完整代碼示例
- 1、MyBuilderSupport 生成器代碼
- 2、使用 MyBuilderSupport 生成器創建 Xml 代碼
一、nodeCompleted 方法獲取節點閉合信息
在之前的博客中 , 在 BuilderSupport#createNode 方法中創建了 Xml 節點 , 在 BuilderSupport#setParent 方法中設置了 Xml 節點之間的父子關系 ;
下面還需要獲取節點的閉合信息 , 節點結束時 , 需要獲取到該信息 , 重寫 BuilderSupport#nodeCompleted 方法 , 該方法不是抽象的方法 , 需要手動添加 , 節點結束后 , 會自動回調該方法 ;
/*** 閉合節點時, 回調該方法* @param parent* @param node*/@Overrideprotected void nodeCompleted(Object parent, Object node) {super.nodeCompleted(parent, node)println "nodeCompleted 完成了父節點為 parent : $parent 的節點 node : $node 的閉合操作"}自定義的 Xml 生成器核心代碼如下 :
- 首先 , 在 createNode 方法中創建 Node 節點 ;
- 然后 , 在 setParent 方法中設置節點之間的父子關系 ;
- 最后 , 在 nodeCompleted 方法中獲取節點的閉合操作 ;
執行
// 創建自定義 Xml 構造器 def myBuilderSupport = new MyBuilderSupport()// 構建 student 根節點 myBuilderSupport.student {// 構建 student 根節點下的 name 節點// 該節點有 code: "UTF-8" 屬性// 節點元素為 "Tom" 字符串name("Tom", code: "UTF-8")age(18) }代碼后的打印結果如下 :
創建節點 名稱 : student, 屬性 : null, 值 : null 創建節點 名稱 : name, 屬性 : [code:UTF-8], 值 : Tom setParent 設置子節點 name 的父節點是 student nodeCompleted 完成了父節點為 parent : student 的節點 node : name 的閉合操作 創建節點 名稱 : age, 屬性 : null, 值 : 18 setParent 設置子節點 age 的父節點是 student nodeCompleted 完成了父節點為 parent : student 的節點 node : age 的閉合操作 nodeCompleted 完成了父節點為 parent : null 的節點 node : student 的閉合操作其中我們只關注 nodeCompleted 方法中打印出的節點閉合信息 ;
在設置了 name 為 student 節點的子節點之后 , name 節點就閉合了 , 打印出
nodeCompleted 完成了父節點為 parent : student 的節點 node : name 的閉合操作內容 , 然后在將 age 節點 設置為 student 節點的子節點之后 , 該 age 節點也閉合了 , 打印出
nodeCompleted 完成了父節點為 parent : student 的節點 node : age 的閉合操作name 和 age 節點都閉合后 , 根節點 student 節點也隨之閉合 , 整個 Xml 文件所有的節點都閉合了 ;
本博客的參考 Xml 文件數據 :
<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 {/*** 設置節點之間的關系* @param parent Xml 中的父節點* @param child Xml 中的父節點下的子節點*/@Overrideprotected void setParent(Object parent, Object child) {println "setParent 設置子節點 ${child} 的父節點是 ${parent}"}@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 name;}/*** 閉合節點時, 回調該方法* @param parent* @param node*/@Overrideprotected void nodeCompleted(Object parent, Object node) {super.nodeCompleted(parent, node)println "nodeCompleted 完成了父節點為 parent : $parent 的節點 node : $node 的閉合操作"} }
2、使用 MyBuilderSupport 生成器創建 Xml 代碼
// 創建自定義 Xml 構造器 def myBuilderSupport = new MyBuilderSupport()// 構建 student 根節點 myBuilderSupport.student {// 構建 student 根節點下的 name 節點// 該節點有 code: "UTF-8" 屬性// 節點元素為 "Tom" 字符串name("Tom", code: "UTF-8")age(18) }
執行結果 :
創建節點 名稱 : student, 屬性 : null, 值 : null 創建節點 名稱 : name, 屬性 : [code:UTF-8], 值 : Tom setParent 設置子節點 name 的父節點是 student nodeCompleted 完成了父節點為 parent : student 的節點 node : name 的閉合操作 創建節點 名稱 : age, 屬性 : null, 值 : 18 setParent 設置子節點 age 的父節點是 student nodeCompleted 完成了父節點為 parent : student 的節點 node : age 的閉合操作 nodeCompleted 完成了父節點為 parent : null 的節點 node : student 的閉合操作總結
以上是生活随笔為你收集整理的【Groovy】自定义 Xml 生成器 BuilderSupport ( nodeCompleted 方法获取节点闭合信息 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】自定义 Xml 生成器
- 下一篇: 【Groovy】自定义 Xml 生成器