【Groovy】自定义 Xml 生成器 BuilderSupport ( 构造 Xml 节点类 | 封装节点名称、节点值、节点属性、子节点 | 将封装的节点数据转为 Xml 字符串 )
生活随笔
收集整理的這篇文章主要介紹了
【Groovy】自定义 Xml 生成器 BuilderSupport ( 构造 Xml 节点类 | 封装节点名称、节点值、节点属性、子节点 | 将封装的节点数据转为 Xml 字符串 )
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 一、構(gòu)造 Xml 節(jié)點類
- 1、封裝節(jié)點名稱、節(jié)點值、節(jié)點屬性、子節(jié)點
- 2、將封裝的節(jié)點數(shù)據(jù)轉(zhuǎn)為 Xml 字符串
- 二、Xml 節(jié)點類完整代碼
一、構(gòu)造 Xml 節(jié)點類
生成 Xml 數(shù)據(jù)前 , 首先要將 Xml 數(shù)據(jù)封裝起來 , 先手機 Xml 的各個層級節(jié)點的信息 , 最后利用這些節(jié)點信息生成 Xml 數(shù)據(jù) ;
參考下面的 xml 文件構(gòu)造節(jié)點類 ;
<student><name code="utf-8">Tom</name><age>18</age> </student>1、封裝節(jié)點名稱、節(jié)點值、節(jié)點屬性、子節(jié)點
定義 XmlNode 類 , 使用該類代表節(jié)點
- 封裝 String 類型的的名稱 :
- 封裝 String 類型的節(jié)點值 :
- 封裝 Map 類型的節(jié)點屬性 :
- 封裝子節(jié)點信息 : 每個節(jié)點下可能有多個子節(jié)點 , 因此該子節(jié)點是一個 ArrayList 集合 ;
2、將封裝的節(jié)點數(shù)據(jù)轉(zhuǎn)為 Xml 字符串
參考下面的 xml 文件 , 開發(fā) 轉(zhuǎn)換 Xml 數(shù)據(jù)方法 ;
<student><name code="utf-8">Tom</name><age>18</age> </student>節(jié)點有 222 種情況 , 帶屬性的節(jié)點和不帶屬性的節(jié)點 ,
- ① 帶屬性的節(jié)點 <name code="utf-8">Tom</name>
- ② 不帶屬性的節(jié)點 <age/>
使用給定的 Writer writer 輸出 Xml 信息 ;
以 <name code="utf-8">Tom</name> 為例 , 先輸出 <name 信息 ,
writer.write("<${name}")假如該節(jié)點有節(jié)點屬性信息 , 循環(huán)寫出節(jié)點屬性 ;
/*假如該節(jié)點有節(jié)點屬性信息循環(huán)寫出節(jié)點屬性*/if (attributes != null) {attributes.each {writer.write(" ${it.key}='${it.value}'")}}節(jié)點值以及子節(jié)點輸出可能有如下 555 種情況 :
- 節(jié)點有值, 沒有子節(jié)點
- 節(jié)點沒有值, 沒有子節(jié)點
- 節(jié)點有值, 有子節(jié)點
- 節(jié)點沒有值, 有子節(jié)點
- 既沒有值有沒有子節(jié)點
二、Xml 節(jié)點類完整代碼
class XmlNode {/*** 節(jié)點名稱*/String name/*** 節(jié)點值*/String value/*** 節(jié)點屬性*/Map attributes/*** 子節(jié)點 ArrayList 類型*/def children = []XmlNode(String name, String value, Map attributes) {this.name = namethis.value = valuethis.attributes = attributes}/* <student><name code="utf-8">Tom</name><age>18</age> </student> *//*** 寫出該 XmlNode 節(jié)點數(shù)據(jù)* @param writer*/def build(Writer writer) {/*寫出 name 節(jié)點名稱注意 : 此處有 2 種情況① 帶屬性的節(jié)點 <name code="utf-8">Tom</name>② 不帶屬性的節(jié)點 <age/>先寫出 "<name"*/writer.write("<${name}")/*假如該節(jié)點有節(jié)點屬性信息循環(huán)寫出節(jié)點屬性*/if (attributes != null) {attributes.each {writer.write(" ${it.key}='${it.value}'")}}/*可能有如下情況節(jié)點有值, 沒有子節(jié)點節(jié)點沒有值, 沒有子節(jié)點節(jié)點有值, 有子節(jié)點節(jié)點沒有值, 有子節(jié)點既沒有值有沒有子節(jié)點要兼顧處理上述 5 種情況*/if (value != null || children != null) {// 處理前 4 種情況writer.write(">")if (value != null){writer.write("${value}")}if (children != null) {children.each {it.build(writer)}}// 節(jié)點收尾writer.write("</${name}>")} else {// 既沒有值有沒有子節(jié)點的情況// <age/> , 之前寫出了 "<age" , 現(xiàn)在寫出 "/>"writer.write("/>")}} }
總結(jié)
以上是生活随笔為你收集整理的【Groovy】自定义 Xml 生成器 BuilderSupport ( 构造 Xml 节点类 | 封装节点名称、节点值、节点属性、子节点 | 将封装的节点数据转为 Xml 字符串 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】自定义 Xml 生成器
- 下一篇: 【Groovy】自定义 Xml 生成器