日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Groovy】自定义 Xml 生成器 BuilderSupport ( nodeCompleted 方法获取节点闭合信息 )

發布時間:2025/6/17 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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 方法中獲取節點的閉合操作 ;
public class MyBuilderSupport extends BuilderSupport {@Overrideprotected Object createNode(Object name, Map attributes, Object value) {println "創建節點 名稱 : $name, 屬性 : $attributes, 值 : $value"return name;}/*** 設置節點之間的關系* @param parent Xml 中的父節點* @param child Xml 中的父節點下的子節點*/@Overrideprotected void setParent(Object parent, Object child) {println "setParent 設置子節點 ${child} 的父節點是 ${parent}"}/*** 閉合節點時, 回調該方法* @param parent* @param node*/@Overrideprotected void nodeCompleted(Object parent, Object node) {super.nodeCompleted(parent, node)println "nodeCompleted 完成了父節點為 parent : $parent 的節點 node : $node 的閉合操作"} }

執行

// 創建自定義 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 方法获取节点闭合信息 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。