日韩性视频-久久久蜜桃-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 方法获取节点闭合信息 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 四虎影视免费永久大全 | 中文字幕第九页 | 强行挺进白丝老师翘臀网站 | 中文视频一区二区 | 超碰在线天天 | 又黄又爽的视频 | 亚洲无吗一区二区三区 | beeg日本高清xxxx18 | 四虎免费网址 | 成色网| 黄色喷水网站 | 免费国产91| 中文字幕亚洲欧美日韩在线不卡 | 精品久久一区 | 在线免费黄色网 | 女优视频在线观看 | 色婷婷视频网 | 国产一级做a爱免费视频 | 国产精品久久久久久久久久妞妞 | 精品国产乱码久久久久久久 | 成人精品视频在线播放 | 美女av免费看 | www.五月天com | 天干夜天干天天天爽视频 | 欧美日韩黄色网 | 日韩欧美一二区 | 婷婷亚洲精品 | 精品伦一区二区三区 | 四虎一级片 | 欧美性色黄 | 91激情| 看国产黄色片 | 国产亚洲精品自拍 | 久久久精品国产免费爽爽爽 | 国内精品视频一区二区三区 | 欧洲精品在线播放 | 成人视频在线观看 | 中文字幕一区二区三区夫目前犯 | 成人av中文解说水果派 | 中文字幕在线视频精品 | 成人p站在线观看 | 嫩草视频免费观看 | 亚洲图片欧美激情 | 免费看国产一级片 | 亚洲天堂免费在线观看视频 | 色www| 亚洲最大av在线 | 少妇久久久久久被弄高潮 | 一道本av| 久久中出| 国产中文在线播放 | 国产+日韩+欧美 | 高跟肉丝丝袜呻吟啪啪网站av | 久久久久亚洲AV成人无码国产 | www.久久久久久久久 | 91麻豆精品国产91久久久更新时间 | 国产乱码精品一区二三区蜜臂 | 超碰2025 | 国产a大片| 日本人の夫妇交换 | 熟妇人妻中文av无码 | 欧美性猛交xxxx免费看久久久 | 黄色网址国产 | 国产区一二三 | av免费观看网址 | 黄色网址中文字幕 | 人人看人人爱 | 无码人妻精品一区二区蜜桃网站 | 日本免费不卡 | 亚洲欧美综合久久 | 聚色av| 综合天天 | 日韩成人免费在线观看 | 中文字幕3页 | 国产日韩欧美在线观看 | 欧美一区二不卡视频 | 成人激情视频在线观看 | 少妇一级视频 | 国产深喉视频一区二区 | 国产亚洲欧美日韩高清 | 精品久久久视频 | 欧美一级片一区 | 国产欧美日韩精品区一区二污污污 | 日本在线不卡一区二区三区 | 色97色| 国产高清不卡一区 | 午夜亚洲福利在线老司机 | 午夜亚洲精品 | 欧亚在线视频 | 好吊视频一区二区三区四区 | 天堂俺去俺来也www久久婷婷 | 粉嫩av一区二区白浆 | 三级黄在线观看 | 蜜桃视频色 | 黄色网视频| 超碰在线观看99 | 特级丰满少妇一级aaa爱毛片 | 国产精品色| 岛国成人在线 |